5

以下基于文档的粗略代码为我提供了 boost.js 中提供的计时器对象的经过时间(以秒为单位)。

boost::timer::cpu_timer timer;
// ...do some work...
const boost::timer::nanosecond_type oneSecond(1000000000LL);
return timer.elapsed().user / oneSecond;

这种方法的问题是我的代码中有这个令人不舒服的幻数。在 boost 中是否有一些方法可以让我从调用elapsed().user可用的nanosecond_type值中获得经过的秒数,而我的代码中没有这个幻数?

(编辑:)结论:

根据接受的答案,我最终在我的生产代码中得到了这个片段:

boost::timer::cpu_timer timer;
// ...do some work...
auto nanoseconds = boost::chrono::nanoseconds(timer.elapsed().user + timer.elapsed().system);
auto seconds = boost::chrono::duration_cast<boost::chrono::seconds>(nanoseconds);
std::cout << seconds.count() << std::endl;
4

3 回答 3

9

正如@jogojapan 建议的那样,boost:: chrono将是一个不错的选择。double但是,如果您用作基础类型,则不需要 duration_cast<> 。

typedef boost::chrono::duration<double> sec; // seconds, stored with a double
sec seconds = boost::chrono::nanoseconds(timer.elapsed().user);
std::cout << seconds.count() << "s\n"; // gives the number of seconds, as double.
于 2013-06-26T12:29:42.780 回答
1

还有一个补充:

double
getSeconds( const boost::timer::nanosecond_type& elapsed )
{
  return
    static_cast< double >(
      boost::chrono::nanoseconds( elapsed ).count()
    ) * boost::chrono::nanoseconds::period::num / boost::chrono::nanoseconds::period::den;
}

例如,您可以调用它timer.elapsed().user来获取经过时间的双精度值。std::chrono如果需要/支持,这显然也可以转换为。

于 2018-06-25T11:47:21.070 回答
0

您应该测量您的软运行的每个硬件上每纳秒的滴答数。看看( 使用 C++ 以纳秒为单位提供时间的计时器功能

于 2013-06-26T05:36:42.327 回答