gpt4 book ai didi

Clock_nanosleep() 尚不支持 CLOCK_MONOTONIC_RAW。如何处理?

转载 作者:行者123 更新时间:2023-12-02 09:24:25 25 4
gpt4 key购买 nike

当前 clock_nanosleep 在 Debian Jessie 上使用 CLOCK_MONOTONIC_RAW 返回 EOPNOTSUPP。

如何解决此问题并补偿可能应用于计时器循环中的 CLOCK_MONOTONIC 的可能的 NTP 调整?

clock_nanosleep 本身是否也受到 NTP 调整的影响?如果在 sleep 时进行调整,clock_nanosleep 的 sleep 时间会比预期的长吗?

在我的具体情况下,我是否应该担心可能的 CLOCK_MONOTONIC NTP 调整?考虑到我的代码将在没有实时时钟的系统上运行并且可能会不时断开 Internet 连接,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_nanosleep 中对 CLOCK_MONOTONIC_RAW 的支持还没有实现?这是否意味着 CLOCK_MONOTONIC 足以应对大多数情况,即使是音频/视频同步?

最佳答案

CLOCK_MONOTONIC 是单调的。它不受来自 ntp 或其他方式的任何跳跃的影响。它唯一受制于的漂移率调整通常由 ntpd 通过 adjtime 或类似方式完成。对于短时间间隔,此调整根本不可见。在任何情况下,只要您的系统没有被恶意配置,它就会比 CLOCK_MONOTONIC_RAW更准确得多。例如(编造的数字,但它们可能在合理范围内)CLOCK_MONOTONIC_RAW 可能以每秒 999950000 纳秒的速率运行,CLOCK_MONOTONIC 以每秒 999950000 纳秒的速率运行每实际秒 1000001000 纳秒。

关于Clock_nanosleep() 尚不支持 CLOCK_MONOTONIC_RAW。如何处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39064160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com