Главная страница
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.018 c
4-1176989866
Dmitry_177
2007-04-19 17:37
2007.10.21
Правильно завершить ожидающий поток


2-1190862389
Mery
2007-09-27 07:06
2007.10.21
IBExpert


6-1172234450
Sp1r1t
2007-02-23 15:40
2007.10.21
Передача массива по сети


11-1174291077
Don
2007-03-19 10:57
2007.10.21
StatusBar и OpenSaveDialog


2-1191087359
olevacho_
2007-09-29 21:35
2007.10.21
размеры формы