繁体   English   中英

如何从boost :: chrono :: hight_resolution_clock :: time_point获得纳秒?

[英]How to get nanoseconds from boost::chrono::hight_resolution_clock::time_point?

我是新来的Boost和Chrono。 我正在编写一个记录器,记录API调用,进入和退出的时间戳。 我尝试首先使用boost :: xtime,但是它没有提供我需要的高分辨率值。 因此正在考虑使用Chrono。 我宣布了boost :: chrono :: hight_resolution_clock :: time_stamp x; 用于获取时间戳并将其分配给boost :: chrono :: hight_resolution_clock :: now();的变量。 现在,我需要从此变量中获取纳秒级的数据,并将其放入我的日志文件中(这是必需的)。 因此,我将其投放为boost :: chrono :: duration_cast(x)。 但这只是不允许我这样做。 显然,它需要2个参数,而我只有一个。 有没有办法解决这个问题? 是否可以创建另一个time_stamp变量并为其分配零并使用该变量? 我尝试分配零,但无法正常工作。 请帮我。

谢谢山姆

如果标记为c++11 ,为什么不使用std::chrono呢?

// Using std::chrono
auto start = std::chrono::high_resolution_clock::now();  // start timer

/* do some work */

auto diff = std::chrono::high_resolution_clock::now() - start; // get difference 
auto nsec = std::chrono::duration_cast<std::chrono::nanoseconds>(diff);
std::cout << "it took: " << nsec.count() << " nanoseconds" << std::endl;

boost::chrono::duration_cast将持续时间转换为指定的单位,但是您给了它boost::chrono::time_point ,而不是持续时间。

确实没有“ 当前时间(以纳秒为单位)”这样的东西。 要获得持续时间,您需要指定一个时间,从该时间开始,您要知道已经过去了多少纳秒(一个“时期”)。 不同的时钟将根据不同的时间段来测量时间。

boost::chrono::system_clock (当前)使用Unix纪元(1970年1月1日午夜)作为其纪元,但它不是稳定的,并且可能没有所需的分辨率(在我的Ubuntu盒子中为纳秒,但在1中在我的Windows机器上为/ 10,000,000秒。

boost::chrono::high_resolution_clock使用启动作为其时代,它是稳定的,并且在我测试过的两个盒子上都以纳秒为单位测量时间。

Boost还提供其他时钟,例如process_cpu_clock ,它们使用其他纪元并以其他单位计数。

因此,您可以从1970年1月1日开始使用system_clock获得nanos,但实际上可能不是十亿分之一秒,如果用户更改系统时间或计算机与网络时间同步,它可能会倒退,或者由于某些原因您可以获取nanos。使用high_resolution_clock其他时间点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM