我正在转换一个线程定时器池单元以供跨平台使用。当前单元使用 timeGetTime 来确保高精度,并在调用计时器事件时报告实际经过的时间间隔。
我以前在 OSX 中使用过 gettimeofday 来获得高分辨率计时器,但找不到任何在 Delphi XE3 中使用的参考。
寻求有关如何在 Delphi 中调用它的帮助或另一种跨平台方式来获得高分辨率计时器。我想要毫秒精度(我知道它依赖于操作系统)。
在此先感谢,马丁
我正在转换一个线程定时器池单元以供跨平台使用。当前单元使用 timeGetTime 来确保高精度,并在调用计时器事件时报告实际经过的时间间隔。
我以前在 OSX 中使用过 gettimeofday 来获得高分辨率计时器,但找不到任何在 Delphi XE3 中使用的参考。
寻求有关如何在 Delphi 中调用它的帮助或另一种跨平台方式来获得高分辨率计时器。我想要毫秒精度(我知道它依赖于操作系统)。
在此先感谢,马丁
一个更好的选择,多平台就绪,可能是使用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