j'avais besoin d'ex�cuter une routine temporis�e avant la fermeture d'un process
un simple timer n'�tait pas utilisable car je ne contr�le pas cette fermeture qui peut intervenir avant l'expiration du timeout
j'ai choisi la technique du waitabletimer pour �viter de me compliquer la vie avec la cr�ation d'un thread
classiquement ce genre de truc sert surtout de timer de pr�cision et comme il y a tr�s peu d'exemple pour delphi dispo sur le net
voici ma contribution
Code : S�lectionner tout - Visualiser dans une fen�tre � part
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;
Ah oui dernier point, SetWaitableTimer est v�rol� jusqu'� la D4, j'ai d� rectifier Windows.pas