现在clock_nanosleep
Debian Jessie 上的 CLOCK_MONOTONIC_RAW 返回 EOPNOTSUPP。
如何解决该问题并补偿可能应用于计时器循环中的 CLOCK_MONOTONIC 的 NTP 调整?
Is clock_nanosleep
本身也受到NTP调整的影响?如果在睡觉时进行调整,将会clock_nanosleep
睡的时间比预期的要长吗?
在我的具体情况下,我是否应该担心可能的 CLOCK_MONOTONIC NTP 调整?考虑到我的代码将在没有实时时钟的系统上运行并且可能会不时失去互联网连接,NTP 对 CLOCK_MONOTONIC 应用的最大可能“时间跳跃”是多少?
故事很长。我正在使用一个简单的循环来模拟音频文件播放,并且我需要保持一致的播放位置。
clock_nanosleep
使用 TIMER_ABSTIME 标志似乎可以很好地完成工作,但我不确定 CLOCK_MONOTONIC 是否足以避免播放位置出现明显的跳跃。
这是我正在使用的代码:
clock_gettime(CLOCK_MONOTONIC, &deadline);
// run until asked to stop
while(!need_quit(stop_mutex_signal)) {
// do stuff ...
// add time ms to previous deadline
deadline.tv_nsec += device->periodTime * NANOSECONDS_PER_MILLISEC;
// normalize the time to account for the second boundary
if(deadline.tv_nsec >= NANOSECONDS_PER_SEC) {
deadline.tv_nsec -= NANOSECONDS_PER_SEC;
deadline.tv_sec++;
}
if(clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &deadline, NULL) != 0)
{
// something happened - error or exit signal, cannot continue
return;
}
}
我很好奇,为什么支持 CLOCK_MONOTONIC_RAWclock_nanosleep
还没有实施吗?这是否意味着 CLOCK_MONOTONIC 对于大多数情况来说就足够了,甚至对于音频/视频同步也是如此?