了解boost库最为简单的timer组件

timer类非常小,全部实现加上注释才72行。非常有必要深入了解一下。下面的源码基本与timer.hpp一致,不过自己多此一举地加了一个析构函数。事实上没有资源需要销毁,只是为了承接progress_timer组件的学习。

使用建议:

timer类接口简单,轻巧好用,适合于大部分的程序计时任务。不过就精度而言,它不适用于高精度时间测量任务。难以做到跨平台。也不适合大跨度时间段的测量,可提供的最大时间跨度只有几百个小时。

 

#include <iostream>
#include <ctime> 
/*
cmath库里的std::clock(),返回自进程启动以来的clock数,每秒的clock数由宏CLOCKS_PER_SEC定义 
CLOCKS_PER_SEC的值因操作系统而不同.win32下是1000,而linux下是1000,000.也就是说在
win32下的精度是毫秒,而linux下是微秒 
*/
using namespace std;
class timer{
  public:
  timer(){_start_time = std::clock();} 
  void restart(){_start_time = std::clock();}  
  double elapsed() const{return double(std::clock() - _start_time) / CLOCKS_PER_SEC;}
  double elapsed_max() const{
  return (double((std::numeric_limits<std::clock_t>::max)()) - double(_start_time)) / double(CLOCKS_PER_SEC);
  } //标准库的数值极限类numeric_limits,获得clock_t类型的最大值 
  double elapsed_min() const{return double(1) / double(CLOCKS_PER_SEC);}
  ~timer(){cout << "runtime:" << elapsed() << " s" << endl;}
  private:
  std::clock_t _start_time; //没必要释放该资源 
};
int main(){
    timer t;
    int sum = 0;
    unsigned int i;
    for(i = 0; i < 960000000; ++i){//计算9亿条指令花费的时间(因电脑性能而异) 
    	sum++;
    }
    cout << "accuracy:" << t.elapsed_min() << " s" << endl //精度为毫秒 
         << "elapsed max:" << t.elapsed_max() / 3600 << " hours." << endl;//最大时间跨度为几百个小时 
		//timer对象析构时输出程序已运行的时间 
}

运行结果如下:

accuracy:0.001 s
elapsed max:596.523 hours.
runtime:0.484 s

直接用boost库,代码如下:

#include <iostream>
#include <boost/timer.hpp>
using namespace boost;
using namespace std;
int main(){
   timer t;
   cout << "max elapsed:" << t.elapsed_max() / 3600 << " hours" << endl
        << "min elapsed:" << t.elapsed_min() << " s" << endl
        << "now elapsed:" << t.elapsed() << endl;
}

运行结果:

max elapsed:596.523 hours
min elapsed:0.001 s
now elapsed:0
 

你可能感兴趣的:(timer,linux,360,任务,跨平台)