Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.014 c
15-1190136505
iop
2007-09-18 21:28
2007.10.21
А почему мы одних любим...


2-1190979856
em240
2007-09-28 15:44
2007.10.21
TabSheet.enabled-вопрос


2-1189552979
Delphi-master
2007-09-12 03:22
2007.10.21
Необходимо!!! Обработка клика мышки с высокой точностью!


15-1190241631
Германн
2007-09-20 02:40
2007.10.21
Поддержим отечественных производителей!


2-1190800205
max-wo
2007-09-26 13:50
2007.10.21
TStrings - TStringList




   Наверх