boost 学习笔记 2: timer
boost 学习笔记 2: timer
copy from:http://einverne.github.io/post/2015/12/boost-learning-note-2.html
1:timer
头文件
timer 位于boost命名空间,需要包含头文件 <boost/timer.hpp> 即:
#include <boost/timer.hpp>
using namespace boost;
基本方法
timer变量声明之后即开始计时工作,之后可以调用 elapsed() 方法来测量对象自创建之后所流逝的时间。成员函数 elapsed_max() 和 elapsed_min() 方法返回 timer 能够测量的时间最大值和最小值,输出单位秒。timer类的实现代码很少,可参考源码学习。
timer 实现源码
使用标准库头文件 中的 std::clock() 函数。
使用建议
- 不适合高精度计时,精度依赖操作系统或编译器
- 不适合大跨度时间段测量,最大跨度只有几百小时,如需要天、月甚至年做时间单位,可使用 date_time 库
2:progress_timer
头文件
#include <boost/progress.hpp>
using namespace boost;
基本用法
在定义 progress_timer 之后,析构对象时会自动输出流逝时间。可以使用花括号,来使 progress_timer 实现计时功能。
progress_timer t;
// do some work
cout << t.elapsed() << endl; //print out elapsed time for the task
progress_timer 精度问题,只能保留到小数点后两位,精确到百分之一秒。
3:progress_display
头文件
#include <boost/progress.hpp>
using namespace boost;
基本用法
在构造函数中传入总数,然后迭代更新进度条。
vector<string> v(100);
ofstream fs("test.txt");
progress_display pd(v.size()); // 构造函数,传入进度总数
vector<string>::iterator pos;
for (pos = v.begin(); pos != v.end(); ++pos){ // 遍历迭代,处理字符串,写文件
fs << *pos << endl;
++pd; // 更新进度
}
progress_display 问题
progress_display 向标准输出 cout 输出字符,无法将进度条和输出分离,如果循环中带有输出,则显示会很难看。
#include <boost/timer.hpp>
#include <boost/progress.hpp>
#include <iostream>
#include <stdio.h>
using namespace boost;
using namespace std; int main()
{
timer t;
cout<<"max timespan:"<<t.elapsed_max()/<<"h"<<endl;
cout<<"min timespan:"<<t.elapsed_min()<<"s"<<endl;
cout<<"now time elapsed:"<<t.elapsed()<<"s"<<endl; //progress_timer
progress_timer t1;
cout<<t1.elapsed()<<endl; char c= getchar();
return ;
}
boost 学习笔记 2: timer的更多相关文章
- boost 学习笔记 0: 安装环境
boost 学习笔记 0: 安装环境 最完整的教程 http://einverne.github.io/post/2015/12/boost-learning-note-0.html Linux 自动 ...
- BOOST学习笔记
BOOST学习笔记 1 tool #pragma once #include <vector> #include "boost/noncopyable.hpp" #in ...
- Boost学习笔记(六) progress_display注意事项
progress_display可以用作基本的进度显示,但它有个固有的缺陷:无法把进度显示输出与程序的输出分离. 这是因为progress_display和所有C++程序一样,都向标准输出(cout) ...
- Boost学习笔记(五) progress_display
progress_display可以在控制台显示程序的执行进度,如果程序执行很耗费时间,那么它能够提供一个友好的用户界面 #include <boost\timer.hpp> #inclu ...
- Boost学习笔记(三) progress_timer
progress_timer也是一个计时器,它继承自timer,会在析构时自动输出时间,省去timer手动调用elapsed()的工作,是一个用于自动计时相当方便的小工具. #include < ...
- Boost学习笔记(二) 时间与日期
timer库概述 timer库包含三个组件:分别是计时器类timer.progress_timer和进度指示类progress_display timer 主要作用是计时,精确度是毫秒级.下面是一个简 ...
- boost学习笔记(七)---date_time库
date_time库的日期基于格里高利历,支持从1400-01-01到9999-12-31之间的日期计算 #define BOOST_DATE_TIME_SOURCE #include <boo ...
- Boost学习笔记(一) 什么是Boost
Boost库是一个功能强大.构造精巧,跨平台.开源并且完全免费的C++程序库
- boost 学习笔记 1: lexical_cast
参考原著地址:http://einverne.github.io/post/2015/12/boost-learning-note-1.html 转换对象要求 lexical_cast 对转换对象有如 ...
随机推荐
- 主机-配件-接口-整机-3c-1
standby 待机 hibernate 休眠(睡眠) power-off 关机 usb端口能给外部设备充电在低压状态(standby,hibernate,power-off),如果系统运行在batt ...
- Spring的两种动态代理:Jdk和Cglib 的区别和实现
这是有意义的一天!自己研究一路畅通的感觉真爽 原理是参考大神的,代码手敲 一.原理区别: java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处 ...
- http1.1 和 http2 的协议对比测试
http1.1 和 http2 的协议对比测试 http 协议发展了很多年,目前最为流行的是 http 2. 发现有些网站很流行的网站用的 http1.1, 询问后原来是因为有特殊用途. https: ...
- create-react-app 搭建的项目中,使用 CSS Modules
create-react-app 搭建的项目中,使用 CSS Modules: 修改config目录下 webpack.config.dev.js 和 webpack.config.prod.js 文 ...
- create-react-app 搭建的项目中,让 antd 通过侧边栏导航 Menu 的 Menu.Item 控制 Content 部分的变化
第一种:BrowserRouter把Menu和Route组给一起包起来 <Router></Router> 标签要把Menu和Route组给一起包起来 修改src/index. ...
- PHP实现IP访问限制及提交次数的方法详解
一.原理 提交次数是肯定要往数据库里写次数这个数据的,比如用户登陆,当用户出错时就忘数据库写入出错次数1,并且出错时间,再出错写2,当满比如5次时提示不允许再登陆,请明天再试,然后用DateDiff计 ...
- xcrun: error: invalid active developer path
问题 mac升级到10.12(macOS Sierra),执行命令,出现如下错误: xcrun: error: invalid active developer path (/Library/Deve ...
- String的疑问
ss[]//var ss:String; 和 Pointer(ss)^ 是不是一个意思呢? 答:不是. ss[]表示第一个字符.如:ss:='abc' 则表示]=Length(ss); Pointer ...
- SQL 行列转置
),),[Score] int) Insert Class union all union all union all union all union all union all union all ...
- TStrings与Memo.Lines赋值的问题
//想实现在函数中生成Memo1的内容,而后赋给Memo.Lines //方法1: var s: TStrings; begin s := TStringList.Create; AddMemoDat ...