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