Search code examples
c++boost

How to get elapsed time in seconds from boost::timer::cpu_timer?


The following rough code, based on the documentation, gives me the elapsed time in seconds from the timer object provided in boost.

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

The problem with this method is that I have this uncomfortable magic number in my code. Is there some method within boost that can give me elapsed seconds out of the nanosecond_type value available from the call to elapsed().user, without having this magic number sitting in my code?

(EDIT:) Conclusion:

Based on the accepted answer, I ended up with this snippet in my production code:

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;

Solution

  • As @jogojapan suggested, boost::chrono would be a good choice. But you don't need the duration_cast<> if you use double as underlying type.

    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.