Embarcadero Delphi
Pomiar przedziałów czasowych
Szukaj…
Korzystanie z interfejsu API Windows GetTickCount
Funkcja GetTickCount
interfejsu API systemu Windows zwraca liczbę milisekund od uruchomienia systemu (komputera). Oto najprostszy przykład:
var
Start, Stop, ElapsedMilliseconds: cardinal;
begin
Start := GetTickCount;
// do something that requires measurement
Stop := GetTickCount;
ElapsedMillseconds := Stop - Start;
end;
Zauważ, że GetTickCount
zwraca 32-bitowy DWORD
więc jest zawijany co 49,7 dni. Aby uniknąć zawijania, możesz użyć GetTickCount64
(dostępnego od Windows Vista) lub specjalnych procedur do obliczenia różnicy GetTickCount64
:
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;
W każdym razie te procedury zwrócą niepoprawne wyniki, jeśli interwał dwóch kolejnych wywołań GetTickCount
przekroczy granicę 49,7 dnia.
Przykład konwersji milisekund na sekundy:
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;
Korzystanie z rekordu TStopwatch
Najnowsze wersje Delphi są dostarczane z rekordem TStopwatch, który służy do pomiaru przedziału czasu. Przykładowe użycie:
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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow