我正在转换一个跨平台使用的线程计时器池单元。当前单元使用timeGetTime来确保高精度,并在调用计时器事件时报告实际经过的时间间隔。
我以前在OSX中使用过gettimeofday来获得一个高精度的定时器,但在Delphi XE3中找不到任何对它的引用。
寻找有关如何在Delphi中调用此函数的帮助,或者使用另一种跨平台方式来获取高分辨率计时器。我想要毫秒的准确性(我知道它依赖于操作系统)。
提前谢谢你,马丁
发布于 2013-02-27 12:32:54
一个更好的选择,多平台就绪,可能是使用来自System.Diagnostics单元的TStopWatch记录。
如果可用,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
https://stackoverflow.com/questions/15103816
复制相似问题