2016-08-03 154 views
-1

我是新的推动和计时。我正在写一个日志记录器,记录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变量并将其赋值给它并使用该变量?我试图分配零,但它不工作。请帮助我。如何从boost :: chrono :: hight_resolution_clock :: time_point获取纳秒数?

感谢, 山姆

+0

您的目标系统实际上是否能够实现_nanosecond_ timer分辨率? –

+1

你想要几纳秒_since_?你希望自上一整秒(高分辨率时间戳)以来的纳秒,还是你想从时代开始纳秒,或者什么? –

+0

是的,我的目标系统具有纳秒级的分辨率。我需要纳秒级的当前时间(高分辨率时间戳)。 – Sam

回答

2

如果标记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; 
+0

嗨,Remis,这不是用于获得纳秒时间的解决方案吗?是否有可能获得纳秒级的当前时间?请指教 – Sam

+0

“纳秒当前时间”是什么意思?时间点被定义为由时钟定义的历元之后的持续时间。例如1970-01-01是UNIX系统的时代。因此,“当前时间”大约是自一个时代以来的1,470,252,780,000,000,000纳秒。 – Remis

+0

在章节[5.7中寻找更多信息。 Clocks and Timers](http://www.informit.com/articles/article.aspx?p=1881386&seqNum=2),来自C++标准库,The:A Tutorial and Reference。 – Remis

1

boost::chrono::duration_cast的持续时间转换成指定的单位,但你给它一个boost::chrono::time_point,而不是时间。

真的没有“当前时间以纳秒为单位”“。要获得持续时间,您需要指定您想要知道已经过去了多少纳秒的时间(“时代”)。不同的时钟会根据不同的时代测量他们的时间。 (目前)使用Unix时代(1970年1月1日午夜)作为它的时代,但它并不稳定,它可能没有你需要的分辨率(我的Ubuntu盒子的分辨率是纳秒,但是在1/1000,000在我的Windows机器上秒钟)。

boost::chrono::high_resolution_clock使用引导作为其时代,是稳定的,并在我测试的两个盒子上测量时间(以纳秒为单位)。

Boost还提供其他时钟,如process_cpu_clock,其他时钟使用其他时期并在其他单位计数。

因此,你可以使用system_clock得到毫微自1970年1月1日,但它实际上可能没有纳秒准确,如果用户更改系统时间或在计算机与网络时间同步,可能走回头路,或者你可以从其他时间点使用high_resolution_clock获得纳米级。

相关问题