使用单调时钟的绝对时间

时间:2015-03-03 04:02:52

标签: c++ c linux

对于某些第三方库函数,它要求我传递timespec使用绝对时间而不是相对时间。

要做到这一点,我有:

struct timespec ts;
struct timespec now;
if (clock_gettime(CLOCK_REALTIME, &now) != 0)
{
    printf("Error: ");
    printf("%s\n", strerror(errno));
}
tspec_add(&ts, &now, 5000);  //ts = now + 5000ms.

//I pass ts to the library function.

功能正常。但是,如果我使用CLOCK_MONOTONICCLOCK_MONOTONIC_RAW则无效。

我检查了错误(没有发生)。功能成功但输出的时间完全不同而且非常小。它为tv.sec打印了9005,但在使用CLOCK_REALTIME时,它打印了一个巨大的数字(我假设时间以来的时间)。

这是为什么?我怎样才能使用单调时钟来做同样的事情?

1 个答案:

答案 0 :(得分:4)

正如@IwillnotexistIdonotexist暗示的那样,CLOCK_MONOTONIC没有指定的起点,你无法将单调时间可靠地转换为实时。

引用clock_gettime manpage,获取CLOCK_MONOTONIC:

  

无法设置的时钟,表示一些时间以来的单调时间   未指明的起点

唯一的限制是MONOTONIC时间必须大于系统的正常运行时间(为了单调增加所需)。

我希望大多数实现确实只是启动后的时钟滴答,但没有任何保证。