伙计们,在我的应用程序中,我正在使用 clock_gettime(CLOCK_MONOTONIC)
来测量帧之间的增量时间(gamedev 中的一种典型方法),我不时会遇到一个奇怪的问题clock_gettime(..)
的行为 - 返回值有时不是单调的(即上一个时间大于当前时间)。
目前,如果发生这样的悖论,我只是跳过当前帧并开始处理下一帧。
问题是这怎么可能呢?它是 clock_gettime
的 Linux POSIX 实现中的错误吗?我使用的是 Ubuntu 服务器版 10.04(内核 2.6.32-24、x86_64)、gcc-4.4.3。
最佳答案
man clock_gettime
说:
CLOCK_MONOTONIC_RAW (since Linux 2.6.28; Linux-specific)
Similar to CLOCK_MONOTONIC, but provides access to a raw hardware-based time that is not subject to NTP adjustments.
由于 CLOCK_MONOTONIC_RAW
不是 NTP 调整的主题,我想 CLOCK_MONOTONIC
可能是。
我们在使用 2.6.18 内核和某些特定 Itanium 处理器的 Redhat Enterprise 5.0 时遇到了类似的问题。我们无法在同一操作系统上使用其他处理器重现它。它在 RHEL 5.3 中得到修复,内核稍新一些,还有一些 Redhat 补丁。
关于Linux clock_gettime(CLOCK_MONOTONIC) 奇怪的非单调行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6833542/