1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| uses Windows
implementation
var
hTimer: THANDLE;
liDueTime : LARGE_INTEGER;
procedure ExecOnWaitableTimer(const lpArgs:Pointer; const dwTimerLowValue, dwTimerHighValue:LongWord);stdcall;
begin
//lpArgs est utilisé à titre d'exemple de transmission de paramètres
if LongInt(lpArgs) = -1 then MessageBox(0,'Ok','Test',0);
end;
function toto;
liDueTime.QuadPart := -10000 * 250; //timeout 250ms
hTimer:=CreateWaitableTimer(nil,True,nil);
if not SetWaitableTimer(hTimer,TLargeInteger(liDueTime),0,@ExecOnWaitableTimer,Pointer(-1),False) then MessageBox(0,'Waitable timer error','error',0);
procedure OnExit;
begin
//arrêt jusqu'à la fin du timeout
//la routine d'achèvement ne sera exécutée que si le thread est placé en mode "alertable" d'où le SleepEx pour pomper la file d'attente APC
if WaitForSingleObjectEx(hTimer,INFINITE,True) = WAIT_OBJECT_0 then SleepEx(0,True);
end; |
Partager