如何使clock_gettime使用CLOCK_REALTIME单调

How to make clock_gettime using CLOCK_REALTIME monotonic?

本文关键字:CLOCK REALTIME 单调 使用 gettime 何使 clock      更新时间:2023-10-16

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,如果这恰好是您的平台(并且它将满足您的需求)。