C++ 如何从boost::timer::cpu\U timer获取以秒为单位的运行时间?
以下基于的粗略代码给出了boost中提供的timer对象经过的时间(以秒为单位)C++ 如何从boost::timer::cpu\U timer获取以秒为单位的运行时间?,c++,boost,C++,Boost,以下基于的粗略代码给出了boost中提供的timer对象经过的时间(以秒为单位) boost::timer::cpu_timer timer; // ...do some work... const boost::timer::nanosecond_type oneSecond(1000000000LL); return timer.elapsed().user / oneSecond; 这个方法的问题是,我的代码中有一个令人不舒服的幻数。boost中是否有某种方法可以在调用appead().
boost::timer::cpu_timer timer;
// ...do some work...
const boost::timer::nanosecond_type oneSecond(1000000000LL);
return timer.elapsed().user / oneSecond;
这个方法的问题是,我的代码中有一个令人不舒服的幻数。boost中是否有某种方法可以在调用appead().user获得的纳秒类型值中为我提供已用秒数,而我的代码中没有这个神奇的数字
(编辑:)结论:
根据公认的答案,我在我的产品代码中得到了以下代码片段:
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;
boost::timer::cpu\u定时器;
//…做些工作。。。
自动纳秒=boost::chrono::纳秒(timer.appeased().user+timer.appeased().system);
自动秒=boost::chrono::duration\u cast(纳秒);
std::cout您应该在软运行的每个硬件上测量每纳秒的滴答数。。
看看(
)正如@jogojapan所建议的,这将是一个不错的选择。但是如果使用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.
typedef boost::chrono::duration sec;//秒,用双精度计数器存储
秒=boost::chrono::纳秒(timer.appeased().user);
标准::cout再添加一项:
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;
}
double
getSeconds(常量提升::计时器::纳秒\u类型和运行时间)
{
返回
静态_cast(
boost::chrono::纳秒(已用).count()
)*boost::chrono::纳秒::period::num/boost::chrono::纳秒::period::den;
}
例如,您可以使用timer.appeased().user
调用此函数,以获得经过时间的双倍值。如果需要/支持,这显然也可以转换为std::chrono
。我的第一个猜测是boost::chrono
的duration\u cast
可以做到这一点——假设chrono
和timer
在这方面是兼容的。我不确定我会对这个神奇的数字感到不舒服,由于duration\u cast只是将魔力下推到boost中。谢谢,但是在本例中,我特别尝试使用boost::timer::cpu\u timer类。基于我写的建议。我保留了@jogojapan建议的持续时间,因为它更具可读性。现在正在测试。我认为问题在于它会减少小数部分。。。?