C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Неправильная задержка по времени  (Прочитано 1506 раз)
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


Неправильная задержка по времени
« : 09 Июнь 2014, 14:11:24 »

Здравствуйте. На повестку дня выносится такой вопрос.
   В приложении создал отдельный поток (при помощи класса TThread) и в обработчике Execute сделал бесконечный цикл while(1) {   } c WaitForSingleObject внутри.

  void __fastcall TThreadSSN::Execute()
{
FreeOnTerminate = true;
        //---- Place thread code here ----
        while (1)
  {

    WaitForSingleObject(hShow,10);
   ..
  }
}
событие hShow нигде не фигурирует и никогда не становится активным.
Так вот сам вопрос)))  Когда Builder6 включен прога работает как надо т.е. задержка выдерживается примерно в 10 млсек. Как только Builder6 выключаю задержка 15    млсек! Кто нить сталкивался с такими проказами природы?   
Записан
POV
Участник


Сказали спасибо: +107/-7
Offline

Сообщений: 640


Re: Неправильная задержка по времени
« Ответ #1 : 09 Июнь 2014, 15:41:10 »

Гыгы.. это ж таймер ) Не дождесся от него точности.
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Неправильная задержка по времени
« Ответ #2 : 10 Июнь 2014, 07:49:43 »

А зачем такой изощренный способ делать паузу? Не пробовал просто Sleep(10) ?
Записан
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


Re: Неправильная задержка по времени
« Ответ #3 : 10 Июнь 2014, 08:43:34 »

Я читал (по моему у того же Архангельского) что Sleep(10) это и есть   WaitForSingleObject(hEvent,Time); только запихнутый в эту функцию Sleep;
Записан
POV
Участник


Сказали спасибо: +107/-7
Offline

Сообщений: 640


« Ответ #4 : 10 Июнь 2014, 09:02:38 »

Попробуй в потоке крутить код типа:

Код
#include 
 
TDateTime LastDT;
...
 
 
void __fastcall TThreadSSN::Execute()
{
LastDT = Now();
while (!Terminated)
{
if (MilliSecondOf(Now()-LastDT) >= 10)
{ // реакция. например, флаг выставляется
LastDT = Now();
...
}
}
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.084 секунд. Запросов: 21.