Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从boost::timer::cpu\U timer获取以秒为单位的运行时间?_C++_Boost - Fatal编程技术网

C++ 如何从boost::timer::cpu\U 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对象经过的时间(以秒为单位)

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建议的持续时间,因为它更具可读性。现在正在测试。我认为问题在于它会减少小数部分。。。?