Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.21;
Скачать: CL | DM;

Вниз

Правильно завершить ожидающий поток   Найти похожие ветки 

 
Dmitry_177   (2007-04-19 17:37) [0]

Создал поток, который используется в качестве будильника и с момента его срабатывания с определенным периодом должно что-то происходить, так:

function ThreadTimer(Param: Pointer): DWORD; stdcall;
begin
 while true do
   begin
     WaitForSingleObject(hTimer, INFINITE);
     // действия
   end;
end;

...

hTimer := CreateWaitableTimer(nil, false, nil);
SetWaitableTimer(hTimer, TLargeInteger(fTime), Period, nil, nil, false);
CloseHandle(CreateThread(nil, 0, @ThreadTimer, nil, 0, idThread));


Но вопрос в том, как правильно остановить этот ThreadTimer? Ведь пользователь может сменить время срабатывания или период..


 
Dmitry_177   (2007-04-19 17:40) [1]

Может в цикле while true do вместо true сделать флажек, например b: BOOL? И при изменении времени выставить флажек и выполнить CloseHandle(hTimer); тогда по идее WaitForSingleObject прекратит работу и при измененном флажке цикл прекратится и поток сам завершит свою работу.. Но это я только предложил, правильно ли это? Больше всего меня волнует правильно ли то что при CloseHandle(hTimer); функция WaitForSingleObject завершится?


 
Leonid Troyanovsky ©   (2007-04-19 19:02) [2]


> Dmitry_177   (19.04.07 17:40) [1]

>  правильно ли это? Больше всего меня волнует правильно ли
> то что при CloseHandle(hTimer); функция WaitForSingleObject
> завершится?

If this handle is closed while the wait is still pending, the function"s behavior
is undefined.

В качестве решения можно избрать WaitForMultipleObjects
или WaitForSingleObjectEx. RTFM: msdn.

--
Regards, LVT.


 
GrayFace ©   (2007-04-23 14:07) [3]

Создать Event и ждать его вместе с WaitableTimer"ом. А еще можно обойтись без WaitableTimer"а: WaitForSingleObject(hEvent, 100{интервал таймера}). Только точность отсчета времени может пострадать.



Страницы: 1 вся ветка

Текущий архив: 2007.10.21;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.019 c
2-1191273430
San1712
2007-10-02 01:17
2007.10.21
Как программно менять обои на рабочем столе ?


2-1191116003
trigger
2007-09-30 05:33
2007.10.21
данные за последние 5 минут


2-1191146809
SveTTT
2007-09-30 14:06
2007.10.21
TButton не меняет цвет шрифта


2-1191009199
vasIZmax
2007-09-28 23:53
2007.10.21
Вот как можно ускорить программу?


2-1190633921
alshtam
2007-09-24 15:38
2007.10.21
ресурс