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/