продолжение юнита, всё в одном должно быть 
 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 - возвращает отсчитанное время с момента обнуления таймера в миллисекунд. 
 это немного доработанный пример, один з которых можно найти даже в инете, использовал для замера работы сложных и ресурсоёмких процедур. вполне нормально работает.