1

我正在转换一个线程定时器池单元以供跨平台使用。当前单元使用 timeGetTime 来确保高精度,并在调用计时器事件时报告实际经过的时间间隔。

我以前在 OSX 中使用过 gettimeofday 来获得高分辨率计时器,但找不到任何在 Delphi XE3 中使用的参考。

寻求有关如何在 Delphi 中调用它的帮助或另一种跨平台方式来获得高分辨率计时器。我想要毫秒精度(我知道它依赖于操作系统)。

在此先感谢,马丁

4

1 回答 1

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

于 2013-02-27T04:32:53.643 回答