了解boost库最为简单的timer组件
2012-03-09 20:14
423 查看
timer类非常小,全部实现加上注释才72行。非常有必要深入了解一下。下面的源码基本与timer.hpp一致,不过自己多此一举地加了一个析构函数。事实上没有资源需要销毁,只是为了承接progress_timer组件的学习。
使用建议:
timer类接口简单,轻巧好用,适合于大部分的程序计时任务。不过就精度而言,它不适用于高精度时间测量任务。难以做到跨平台。也不适合大跨度时间段的测量,可提供的最大时间跨度只有几百个小时。
运行结果如下:
accuracy:0.001 s
elapsed max:596.523 hours.
runtime:0.484 s
直接用boost库,代码如下:
运行结果:
max elapsed:596.523 hours
min elapsed:0.001 s
now elapsed:0
使用建议:
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与TimerTask
- 简单了解Timer与TimerTask
- 简单了解Timer和TimerTask
- 简单了解Timer与TimerTask
- Android学习之四大组件简单介绍
- gemfire的简单了解
- [转]让窗体飘动起来 C#中Timer组件用法
- 简单画板的实现——Swing组件略述
- go语言,简单分析和了解
- EventBus(组件与后台线程间的通信)的简单使用
- swift的简单了解
- C#组件开发——简单计数器
- 简单易用的.NET免费开源RabbitMQ操作组件EasyNetQ解析
- 自定义 React Native 二维码扫描组件(简单,易用!)
- springmvc的HandlerInterceptor的简单了解(登录例子)
- 简单了解下xcode的IB
- 在Eclipse或者ADT中使用ButterKnifeZelezny,Android组件初始化从此变得简单易懂!!!!,androideclipseadt
- 4000 less的简单了解
- Java注解的简单了解
- php----网站架构简单了解