两纳秒chrono :: time_points之间的差异,但是在几秒钟内?

时间:2017-01-12 11:10:47

标签: c++ c++11 chrono

我有一个时间戳(自纪元以来的纳秒):

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 个答案:

答案 0 :(得分:4)

您不应该使用@implementation KSTAddressServiceImplementation - (void)loadAddressForLatitude:(double)latitude longitude:(double)longitude completion:(void (^)(KSTAddress * _Nullable address, NSError * _Nullable error))completion { [[GMSGeocoder geocoder] reverseGeocodeCoordinate:CLLocationCoordinate2DMake(latitude, longitude) completionHandler:^(GMSReverseGeocodeResponse * _Nullable response, NSError * _Nullable error) { if (completion) { KSTAddress *address; if (response.firstResult) { address = [[KSTAddress alloc] initWithAddress:response.firstResult]; } completion(address, error); } }]; } @end 。在某些平台上high_resolution_clock计算自计算机启动以来的时间,而不是Unix时代以来的时间。

虽然标准没有规定,但事实上的标准是,在所有平台上,high_resolution_clock计算自Unix时代以来的时间。

我发现首先根据system_clock声明一个基于time_point的模板化类型别名,模板化system_clock。这样可以轻松创建自Unix时代以来计算时间的任何精度的duration

time_point

鉴于:

template <class D>
using sys_time = std::chrono::time_point<std::chrono::system_clock, D>;

在C ++ 14中,您将能够编写:

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