Sök…


Använda Windows API GetTickCount

Funktionen Windows API GetTickCount returnerar antalet millisekunder sedan systemet (datorn) startades. Det enklaste exemplet följer:

var
  Start, Stop, ElapsedMilliseconds: cardinal;
begin
  Start := GetTickCount;
  // do something that requires measurement
  Stop := GetTickCount;
  ElapsedMillseconds := Stop - Start;
end;

Observera att GetTickCount returnerar 32-bitars DWORD så att det går in varje 49,7 dag. För att undvika inpackning kan du antingen använda GetTickCount64 (tillgängligt sedan Windows Vista) eller specialrutiner för att beräkna fästningsskillnad:

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;

Hur som helst kommer dessa rutiner att ge felaktiga resultat om intervallet för två efterföljande samtal med GetTickCount överskrider GetTickCount på 49,7 dagar.

Så här konverterar du millisekunder till sekunder:

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;

Med hjälp av TStopwatch-posten

Nya versioner av Delphi levereras med TStopwatch- posten som är för tidsintervallmätning. Exempel på användning:

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow