伙计们,在我的应用程序clock_gettime(CLOCK_MONOTONIC)中,为了测量帧之间的增量时间(gamedev中的一种典型方法),我不时遇到一种奇怪的行为clock_gettime(..)-返回值有时不是单调的(即上次时间) 是更大的 比目前的时间)。
clock_gettime(CLOCK_MONOTONIC)
clock_gettime(..)
当前,如果发生这样的悖论,我只是跳过当前帧并开始处理下一个帧。
问题是,这怎么可能呢?这是Linux POSIX实现中的错误clock_gettime吗?我正在使用Ubuntu Server Edition 10.04(内核2.6.32-24,x86_64),gcc-4.4.3。
clock_gettime
man clock_gettime 说:
man clock_gettime
CLOCK_MONOTONIC_RAW (从Linux 2.6.28开始;特定于Linux) 与CLOCK_MONOTONIC相似,但是可以访问不受NTP调整的基于硬件的原始时间。
CLOCK_MONOTONIC_RAW (从Linux 2.6.28开始;特定于Linux)
与CLOCK_MONOTONIC相似,但是可以访问不受NTP调整的基于硬件的原始时间。
由于CLOCK_MONOTONIC_RAW不是NTP调整的主题,我想CLOCK_MONOTONIC可能是。
CLOCK_MONOTONIC_RAW
CLOCK_MONOTONIC
我们对带有2.6.18内核和某些特定Itanium处理器的Redhat Enterprise 5.0遇到了类似的问题。我们无法在同一OS上与其他处理器一起复制它。它已在RHEL 5.3中用较新的内核和一些Redhat补丁修复。