两个纳秒级别的chrono::time_points相差多少秒?

3
我有一个时间戳(自纪元以来的纳秒数):
uint64_t ts = .....;

我想检查它是否比当前系统时间早超过5秒。

因此,我需要将时间戳转换为一个time_point,然后从当前时间(以纳秒为单位)中减去它的值,并检查其值是否大于chrono::duration::seconds(5)

目前已经完成以下内容:

const std::chrono::time_point tstp(std::chrono::duration_cast<std::chrono::nanoseconds>(rawNanos));
const std::chrono::time_point now = std::chrono::high_resolution_clock::now();

const bool old = now - tstp > std::chrono::seconds(5);

但是由于time_point的构造器类型而感到困扰。

1个回答

5
您不应该使用high_resolution_clock。在某些平台上,high_resolution_clock计算的是自计算机启动以来的时间,而不是自Unix纪元以来的时间。
虽然标准没有指定,但事实上的标准是,在所有平台上,system_clock计算的是自Unix纪元以来的时间。
我发现首先声明一个基于system_clock的模板类型别名作为基于durationtime_point很方便。这使得可以轻松创建自Unix纪元以来计算时间的任何精度的time_point
template <class D>
using sys_time = std::chrono::time_point<std::chrono::system_clock, D>;

鉴于以下情况:

uint64_t ts = 1235;
using namespace std::chrono;
const bool old =  system_clock::now() >
                      sys_time<nanoseconds>{nanoseconds{ts}} + seconds{5};

在C++14中,您可以编写以下代码:
const bool old =  system_clock::now() >
                      sys_time<nanoseconds>{nanoseconds{ts}} + 5s;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接