Я понимаю, что это низкотехнологичный, но функция Win32 API GetTickCount
работает достаточно хорошо для меня. На большинстве компьютеров разрешение составляет около 15-20 миллисекунд.
Я использую это так, без каких-либо классов, но вы можете легко написать свой собственный класс:
function TimerElapsed(tick1,tick2:DWORD):DWORD;
begin
if ((tick2-tick1) < $80000000) then { timer roll-over check }
result := (tick2 - tick1) { normal }
else
result := (not tick1)+tick2; {rollover calculation}
end;
function TimingDemo:Cardinal;
var
time1,time2:Cardinal;
begin
time1 := GetTickCount;
DoSomethingSlow;
time2 := GetTickCount;
result := TimerElapsed(time1,time2); // return elapsed mSec.
end;