namespace boost {
// timer -------------------------------------------------------------------//
// A timer object measures elapsed time.
// It is recommended that implementations measure wall clock rather than CPU
// time since the intended use is performance measurement on systems where
// total elapsed time is more important than just process or CPU time.
// Warnings: The maximum measurable elapsed time may well be only 596.5+ hours
// due to implementation limitations. The accuracy of timings depends on the
// accuracy of timing information provided by the underlying platform, and
// this varies a great deal from platform to platform.
class timer
{
public:
timer() { _start_time = std::clock(); } // postcondition: elapsed()==0
// timer( const timer& src ); // post: elapsed()==src.elapsed()
// ~timer(){}
// timer& operator=( const timer& src ); // post: elapsed()==src.elapsed()
void restart() { _start_time = std::clock(); } // post: elapsed()==0
double elapsed() const // return elapsed time in seconds
{ return double(std::clock() - _start_time) / CLOCKS_PER_SEC; }
double elapsed_max() const // return estimated maximum value for elapsed()
// Portability warning: elapsed_max() may return too high a value on systems
// where std::clock_t overflows or resets at surprising values.
{
return (double((std::numeric_limits<std::clock_t>::max)())
- double(_start_time)) / double(CLOCKS_PER_SEC);
}
double elapsed_min() const // return minimum value for elapsed()
{ return double(1)/double(CLOCKS_PER_SEC); }
private:
std::clock_t _start_time;
}; // timer
} // namespace boost
timer计时器位于boost命名空间下,根据源码timer是对std::clock()的封装。查阅以下链接
http://en.cppreference.com/w/cpp/chrono/c/clock
对std::clock()进行了详细说明,大意是在实际使用中他们之间的差值才是有意义的,可以用来计算程序计算的大致时间。要想得到秒需要用他们的差值除以CLOCKS_PER_SEC。CLOCKS_PER_SEC表示的是每秒钟的时钟计数,之所以说是计算程序执行的大致时间是因为操作系统分配的资源不同导致的。倘若程序的多线程的就有可能计算的比实际时间更快。若有其他程序也在使用CPU就可能导致时间会比实际时间更慢。
在windows下timer最大是596.523小时,最小是0.001s,所以要计时的程序太长或对精确度要求很高,不要使用此类。