Embarcadero Delphi
Измерение временных интервалов
Поиск…
Использование 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