在c ++(多平台)中获得可靠的单调时间

时间:2014-02-27 14:18:32

标签: c++ boost time

我需要一个可以用来计算间隔的单调时钟。 要求:

  • 必须是单调的,不得受设备时间的影响。
  • 在应用程序会话期间不得重置。(会话中所有返回值的相同纪元)
  • 必须代表真实生命秒(不是cpu秒),不得受当时运行的线程数/进程数的影响。
  • 秒的分辨率就足够了。

在我的研究中,我发现了 候选:

  • std::clock()(ctime) - 似乎使用cpu秒
  • boost::chrono::steady_clock() - 是否使用cpu秒?在申请session(launch-end)期间,纪元可以改变吗?
  • 特定于平台的方法(clock_gettimemach_absolute_time)。

您是否遇到过这样的问题?您选择了哪种解决方案? steady_clock()可靠的多平台吗?

2 个答案:

答案 0 :(得分:3)

我会使用std::chrono::steady_clock。根据描述,它不受壁钟/系统时间变化的影响,最适合测量间隔。

答案 1 :(得分:0)

  

boost::chrono::steady_clock() - 是否使用cpu秒?在应用程序会话(启动结束)期间,纪元可以改变吗?

指定

std::chrono::steady_clock()使用实时秒,并且在会话期间不调整。我认为boost的实现遵循这一点。我对std::chrono::steady_clock没有问题,只是某些平台上的分辨率低于其他平台。