O alternativa API la TTimer-ul din Delphi ar fi crearea unui
Waitable Timer, care, cel putin aparent, are o rezolutie mai buna.
Un waitable timer blocheaza executia thread-ului in care e folosit pentru o durata specificata de timp.
Mai jos am pus un exemplu de folosire, in Delphi, a unui asemenea timer.
procedure TForm1.WaitableTimer;
const sec = 10000000;
var wTimer, lBusy : Longint;
interval : LARGE_INTEGER;
begin
wTimer := CreateWaitableTimer(nil, True, PANSIChar('myWaitableTimer' + IntToStr(GetTickCount)));
{e o idee buna sa-i dam un nume unic - dar poate avea si nume gol}
interval.QuadPart := - sec * 3; {numarul de secunde}
{valoare negativa = valoare relativa}
{valoare pozitiva = valoare absoluta}
Repeat
SetWaitableTimer(wTimer, TLargeInteger(interval), 0, nil, nil, false);
lBusy := WaitForSingleObject(wTimer, INFINITE);
If lBusy = WAIT_OBJECT_0 Then
Begin
Do_Something; {aici se pune codul care se doreste executat la fiecare X secunde}
{e o idee buna sa se puna aici si o conditie de terminare a buclei :) }
End;
Until False;
CancelWaitableTimer(wTimer);
CloseHandle(wTimer);
end;
Happy programming
