Macos OSX的Delphi gettimeofday(相当于win下的timeGetTime)

Macos OSX的Delphi gettimeofday(相当于win下的timeGetTime),macos,delphi,timer,cross-platform,delphi-xe3,Macos,Delphi,Timer,Cross Platform,Delphi Xe3,我正在转换线程计时器池单元以供跨平台使用。 当前单元使用timeGetTime来确保高精度,并在调用计时器事件时报告实际经过的时间间隔 我以前在OSX中使用过gettimeofday来获取高分辨率计时器,但在Delphi XE3中找不到对它的任何引用 寻求帮助,我可以在Delphi中调用此功能,或者通过其他跨平台的方式获取高分辨率计时器。我想ms的准确性(我知道它的操作系统依赖)为这一点 提前感谢,Martin一个更好的选择,即多平台就绪,可能是使用装置中的记录 TStopWatch是一款真正的

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

我以前在OSX中使用过gettimeofday来获取高分辨率计时器,但在Delphi XE3中找不到对它的任何引用

寻求帮助,我可以在Delphi中调用此功能,或者通过其他跨平台的方式获取高分辨率计时器。我想ms的准确性(我知道它的操作系统依赖)为这一点


提前感谢,Martin

一个更好的选择,即多平台就绪,可能是使用装置中的记录

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和OS-X中的/功能

一个更好的选择,即多平台就绪,可能是使用装置中的记录

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和OS-X中的/功能

这依赖于在读取经过的时间之前停止TStopWatch。要将其用作高分辨率事件计时器(equiv TTimer),使用接口中提供的getTimeStamp函数是否安全?@Martin AFAIK无需停止计时器来读取经过的值,关于getTimeStamp,它是安全的,但可能不是您所期望的。您可以检查GetTimeStamp值在记录中的使用方式,并且由于没有记录返回值的单位,因此可以检查它将来可能会发生什么变化。IIRC GetTimeStamp在XE3中为OS-X和Win32.0返回纳秒。在不停止秒表的情况下读取经过的时间是正确的。但是,文档中确实指出“只有在秒表先停止时,经过的值才会更新。在秒表运行时读取经过的属性不会产生任何差异。”我希望这不会在将来“修复”。这依赖于在读取经过的时间之前停止TStopWatch。要将其用作高分辨率事件计时器(equiv TTimer),使用接口中提供的getTimeStamp函数是否安全?@Martin AFAIK无需停止计时器来读取经过的值,关于getTimeStamp,它是安全的,但可能不是您所期望的。您可以检查GetTimeStamp值在记录中的使用方式,并且由于没有记录返回值的单位,因此可以检查它将来可能会发生什么变化。IIRC GetTimeStamp在XE3中为OS-X和Win32.0返回纳秒。在不停止秒表的情况下读取经过的时间是正确的。但是,文档中确实指出“只有在秒表先停止时,经过的值才会更新。在秒表运行时读取经过的属性不会产生任何差异。”我希望这不会在将来“修复”。