在OSX上,类似于Windows的QueryPerformanceCounter的功能是什么?

28

我正在将一个库从Windows移植到*NIX(目前是OSX),有人知道可以使用哪个函数来替代Microsoft的QueryPerformanceCounter和QueryPerformanceFrequency吗?

5个回答

30

6

20
clock_gettime 是 POSIX 实时扩展的一部分,在 Mac OS X 上不幸没有实现。 - Left For Archive
不是一个很好的答案。clock_gettime不被支持,并且它返回的时间是以秒为单位的,而不是计数器滴答声(即使它被支持)。 - Justicle

5
尝试使用boost的ptime进行便携式高分辨率计时。 更新(受到下面Mark评论的启发,两年后):
现在我会使用std::chrono::high_resolution_clock示例

似乎这会在Linux / Mac上运行,但引用:使用子秒分辨率时钟获取UTC时间。 在Unix系统上,这是使用GetTimeOfDay实现的。 在大多数Win32平台上,它是使用ftime实现的。 Win32系统通常不能通过此API实现微秒分辨率。 如果更高的分辨率对您的应用程序至关重要,请测试您的平台以查看所实现的分辨率。 - Mark Harviston
谢谢,ptime并不像我想象的那么便携。不过,你促使我在这里更新了我的答案。另请参阅https://dev59.com/nHI_5IYBdhLWcg3wMf9_ - timday

2

他询问了关于OS X的问题。可以使用CoreAudio中的这些API:

AudioConvertHostTimeToNanos(AudioGetCurrentHostTime())

-3

回到过去,你只能使用uclock或深入汇编语言来读取RDTSC

G.


如果您正在使用高分辨率定时器,那么很可能不会进入省电模式。 - graham.reeds
你可能不会,但其他进程可能会将系统置于该模式。这取决于您的系统具有什么样的约束条件。对于普通公众来说,这并不是保证的。 - ApplePieIsGood
4
如果我记得正确的话,如果您的进程切换 CPU,它也会出问题……我们使用 tsc + Linux 进行了一些评估,并考虑了节能功能的影响。每个内核都有自己的 tsc。 - Ronny Brendel
2
最近的AMD和Intel芯片实现了一致的RDTSC。对我来说已经足够好了。 - Marius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接