![](/img/trans.png)
[英]Difference between boost::chrono::time_point<> and boost::chrono::steady_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.