Поиск…


Использование API Windows GetTickCount

Функция GetTickCount Windows API возвращает количество миллисекунд с момента запуска системы (компьютера). Простейший пример:

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

Обратите внимание, что GetTickCount возвращает 32-разрядный DWORD поэтому он обертывает каждые 49.7 дней. Чтобы избежать обертывания, вы можете использовать GetTickCount64 (доступный с Windows Vista) или специальные процедуры для расчета разности 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;

В любом случае эти процедуры возвращают неверные результаты, если интервал двух последующих вызовов GetTickCount превышает границу 49,7 дня.

Чтобы преобразовать миллисекунды в несколько секунд:

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;

Использование записи TStopwatch

Последние версии Delphi поставляются с записью TStopwatch, которая предназначена для измерения временных интервалов. Пример использования:

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow