Embarcadero Delphi
Mätning av tidsintervall
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