продолжение юнита, всё в одном должно быть
Code
{ THRTimer }
constructor THRTimer.Create;
var
QW: LARGE_INTEGER;
begin
inherited Create;
Exists := QueryPerformanceFrequency(Int64(QW));
ClockRate := QW.QuadPart;
end;
function THRTimer.StartTimer: Boolean;
var
QW: LARGE_INTEGER;
begin
Result := QueryPerformanceCounter(Int64(QW));
StartTime := QW.QuadPart;
end;
function THRTimer.ReadTimer: Double;
var
ET: LARGE_INTEGER;
begin
QueryPerformanceCounter(Int64(ET));
Result := 1000.0 * (ET.QuadPart - StartTime) / ClockRate;
end;
initialization
Timer:= THRTimer.Create();
finalization
Timer.Free();
end.
юзать надо так:
HRT := THRTimer.Create - создание таймера
HRT.StartTimer - обноленин таймера в ноль
HRT.ReadTimer - возвращает отсчитанное время с момента обнуления таймера в миллисекунд.
это немного доработанный пример, один з которых можно найти даже в инете, использовал для замера работы сложных и ресурсоёмких процедур. вполне нормально работает.