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