c++ - 如何使用 CLOCK_REALTIME 使 clock_gettime 单调?

标签 c++ linux time

CLOCK_REALTIME 的一个问题是它不是单调的,如果发生 NTP 同步,时间可能会倒退。

像下面这样的事情让它变得单调是否安全?

struct timespec GetMonotonicTime()
{
    static struct timespec last = timespec();
    struct timespec ts;
    clock_gettime(CLOCK_REALTIME, &ts);
    last.tv_nsec = (last.tv_sec == ts.tv_sec) ? std::max(last.tv_nsec, ts.tv_nsec) : ts.tv_nsec;
    last.tv_sec = std::max(last.tv_sec, ts.tv_sec);

    return last;
}

最佳答案

除了在多线程环境中运行时会出现问题之外,随着时间的推移,您的 ns 属性将逐渐变为 999999999。

Linux 提供 CLOCK_MONOTONIC 如果它恰好是您的平台(并且它会满足您的需求)。

关于c++ - 如何使用 CLOCK_REALTIME 使 clock_gettime 单调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24166911/

相关文章:

c++ - 在不指定命名空间的情况下调用外部函数

c++ - 如果条件不相关,相对于if-else语句,我是否应该选择两个if语句?

linux - 将 CPU 预热到 90% 以上的最简单方法是什么

linux - 我如何使用 docker inspect 找出我的 IP

c++ - 优先队列比较

c++ - 如何更改文本和背景颜色?

java - 网址响应时间

c++ - 将 UTC 转换为本地

linux - 阿尔萨 : How to do stop and resume audio?

date - 以 UTC 存储时间总是一个好主意,还是在这种情况下以本地时间存储更好?