使用单调时钟的绝对时间

Absolute time using monotonic clock

本文关键字:时间 时钟 单调      更新时间:2023-10-16

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

要做到这一点,我有:

struct timespec ts;
struct timespec now;
if (clock_gettime(CLOCK_REALTIME, &now) != 0)
{
    printf("Error: ");
    printf("%sn", 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时,它打印了一个巨大的数字(我假设是从epoch开始的时间)。

为什么会这样?我如何使用单调时钟来做同样的事情?

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

引用clock_MONOTONIC:的clock_gettime手册页

由于某些未指定起始点

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

我预计,自启动以来,大多数实现实际上只是时钟滴答声,但没有什么能保证这一点。