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;
}
答案 0 :(得分:1)
除了在多线程envinronment中运行时遇到问题,随着时间的推移,ns
属性将渐近渐远到999999999。
Linux提供CLOCK_MONOTONIC
,如果它恰好是您的平台(并且它将满足您的需求)。