您的位置:首页 > 其它

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

2012-03-09 20:14 423 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: