Embarcadero Delphi
Misura degli intervalli di tempo
Ricerca…
Utilizzo dell'API di Windows GetTickCount
La funzione GetTickCount
dell'API di Windows restituisce il numero di millisecondi dall'avvio del sistema (computer). L'esempio più semplice segue:
var
Start, Stop, ElapsedMilliseconds: cardinal;
begin
Start := GetTickCount;
// do something that requires measurement
Stop := GetTickCount;
ElapsedMillseconds := Stop - Start;
end;
Notare che GetTickCount
restituisce DWORD
32 bit in modo che GetTickCount
wrapping ogni 49,7 giorni. Per evitare il wrapping, è possibile utilizzare GetTickCount64
(disponibile da Windows Vista) o routine speciali per calcolare la differenza di tick:
function TickDiff(StartTick, EndTick: DWORD): DWORD;
begin
if EndTick >= StartTick
then Result := EndTick - StartTick
else Result := High(NativeUInt) - StartTick + EndTick;
end;
function TicksSince(Tick: DWORD): DWORD;
begin
Result := TickDiff(Tick, GetTickCount);
end;
In ogni caso queste routine restituiranno risultati errati se l'intervallo di due chiamate successive di GetTickCount
supera il limite di 49,7 giorni.
Per convertire un millisecondo in secondi:
var
Start, Stop, ElapsedMilliseconds: cardinal;
begin
Start := GetTickCount;
sleep(4000); // sleep for 4 seconds
Stop := GetTickCount;
ElapsedMillseconds := Stop - Start;
ShowMessage('Total Seconds: '
+IntToStr(round(ElapsedMilliseconds/SysUtils.MSecsPerSec))); // 4 seconds
end;
Utilizzando il record TStopwatch
Le versioni recenti di Delphi vengono fornite con il record TStopwatch che è per la misurazione dell'intervallo di tempo. Esempio di utilizzo:
uses
System.Diagnostics;
var
StopWatch: TStopwatch;
ElapsedMillseconds: Int64;
begin
StopWatch := TStopwatch.StartNew;
// do something that requires measurement
ElapsedMillseconds := StopWatch.ElapsedMilliseconds;
end;
Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow