我正在转换一个线程计时器池单元以供跨平台使用。 当前单位使用timeGetTime来确保高精度,并报告调用计时器事件时的实际经过时间间隔。
我之前在OSX中使用过gettimeofday来获得高分辨率计时器,但是找不到任何对它的引用以便在Delphi XE3中使用。
寻求帮助,我可以用Delphi或其他跨平台方式调用它来获得高分辨率计时器。我想要ms准确度(我知道它依赖于操作系统)。
先谢谢,马丁
答案 0 :(得分:1)
更好的选择,多平台就绪,可能是使用TStopWatch
单元中的System.Diagnostics记录。
TStopWatch是真正的高分辨率计时器(如果可用),在这种情况下具有接近纳秒精度(取决于操作系统和硬件),如果不可用(在Windows中)使用标准计时器功能提供毫秒级精度
如果只需要毫秒精度,请使用ElapsedMilliseconds属性,如下所示:
var
sw : TStopWatch;
ElapsedMilliseconds : Int64;
begin
sw := TStopWatch.Create() ;
try
sw.Start;
Whatever();
sw.Stop;
ElapsedMilliseconds := sw.ElapsedMilliseconds;
finally
sw.Free;
end;
end;
TStopWatch依赖于Windows中的QueryPreformanceFrequency / QueryPerformanceCounter函数和OS-X上的mach_absolute_time