以下粗略代码基于the documentation,给出了在boost中提供的计时器对象所用的经过时间(秒)。
boost::timer::cpu_timer timer;
// ...do some work...
const boost::timer::nanosecond_type oneSecond(1000000000LL);
return timer.elapsed().user / oneSecond;
这种方法的问题在于我的代码中有这个令人不舒服的幻数。在提升中是否有一些方法可以让我经过秒超出对 elapsed()。用户的调用中可用的 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;
答案 0 :(得分:8)
正如@jogojapan所说,boost::chrono将是一个不错的选择。但是你不需要duration_cast&lt;&gt;如果您使用double
作为基础类型。
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.
答案 1 :(得分: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
。
答案 2 :(得分:0)
您应该测量每个硬件运行时每纳秒的滴答数。 看一眼 ( Timer function to provide time in nano seconds using C++)