如何使用CLOCK_REALTIME单调制作clock_gettime?

时间:2014-06-11 15:30:13

标签: 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;
}

1 个答案:

答案 0 :(得分:1)

除了在多线程envinronment中运行时遇到问题,随着时间的推移,ns属性将渐近渐远到999999999。

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