c++ - 使用单调时钟的绝对时间

标签 c++ c linux

对于某些第 3 方库函数,它要求我向其传递一个使用绝对时间而非相对时间的 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 时,它打印了一个巨大的数字(我假设时间从纪元开始)。

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

最佳答案

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

引用clock_gettime manpage ,对于 CLOCK_MONOTONIC:

Clock that cannot be set and represents monotonic time since some unspecified starting point

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

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

关于c++ - 使用单调时钟的绝对时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28823887/

相关文章:

c++ - 具有纯抽象基类的 CRTP : call overhead

c - 使用strcpy时出现段错误?

c++ - 在不禁用 cout/cin 的情况下获取标准输出内容

c - 从文件读取到C中的链表

c - 如何在不删除项目的情况下查看 Linux (POSIX) 消息队列?

linux - 使用 SD 卡作为 Beaglebone Black 的外部存储

javascript - 找不到 PhantomJS 的故障转储

c++ - CreateFile() ERROR_SHARING_VIOLATION 单线程

c++ - 将外部事件循环与 Qt 相结合

c++ - 通过Signal/Slot机制将QString传递给QThread