boost timer库学习
timer是一个很小的库,提供简易的度量时间,和进度显示功能,可以用与性能测试等需要计算的任务,对应大多数的情况够用。
timer包括三个组件,分别是:计时类timer 、process_timer和进度指示类progress_display。
timer类可以测量时间的流逝,是一个小型的计时器,提供毫秒级别的计时精度和操作函数。
timer位于命名空间boost,为了使用timer组件,需要包含头文件<boost/timer.hpp>
即:
#include <boost/timer.hpp>
using namespace boost;
#include<boost/timer.hpp>
#include <iostream>
using namespace std;
using namespace boost;
int main()
{
timer t;
cout<<"max timespan:"<<t.elapsed_max()/3600<<"h"<<endl;
cout<<"min_timespan:"<<t.elapsed_min()<<"s"<<endl;
cout<<"now time elapsed :"<<t.elapsed()<<endl;
return 1;
}
如图结果:
progress_timer使用
progress_timer也是一个计时器,它继承timer,会在析构时候自动输出时间,省去了timer手动elapsed()的工作,是一个自动计时的小工具
progress_timer位于名字空间boost,为了使用progress_timer组件,需要包含头文件<boost/progress.hpp>
using namespace boost;
用法:
progress_timer继承timer全部功能,可以如timer那样使用。例如:
#include<boost/timer.hpp>
#include <iostream>
#include <boost/progress.hpp>
using namespace std;
using namespace boost;
int main()
{
progress_timer t;
cout<<t.elapsed()<<endl;
/*
timer t;
cout<<"max timespan:"<<t.elapsed_max()/3600<<"h"<<endl;
cout<<"min_timespan:"<<t.elapsed_min()<<"s"<<endl;
cout<<"now time elapsed :"<<t.elapsed()<<endl;
*/
system("pause");
}
输出结果为:
如果要在一个程序中测量多个时间,可以运用花括号{}来限定progress_timer的生命周期:
#include<boost/timer.hpp>
#include <iostream>
#include <boost/progress.hpp>
using namespace std;
using namespace boost;
int main()
{
{
progress_timer t1;
}
{
progress_timer t2;
}
{
progress_timer t3;
}
system("pause");
}
显示结果为:
progress_display使用:
progress_display可以在控制台上显示程序的执行进度,如果程序 执行很耗费时间,那么它能够提供一个友好的用户界面。
progress_display位于命名空间boost,为了使用它,需要包含头文件<boost/progress.hpp>
即:
#include<boost/progress.hpp>
using namespace boost;
使用progress_display首先要调用它的构造函数,传人进度基数,如:
progress_display pd(v.size());
如下程序:
#include <boost/progress.hpp>
#include <boost/timer.hpp>
#include <iostream>
#include <vector>
#include <fstream>
#include <boost/static_assert.hpp>
#include <string>
using namespace boost;
using namespace std;
int main()
{
vector<string> v(100,"aaa");
v[10]="",v[23]="";
ofstream fs("c:\\test1.txt");
progress_display pd(v.size());
vector<string>::iterator pos;
for(pos=v.begin();pos!=v.end();++pos)
{
fs<<*pos<<endl;
++pd;
//if(pos->empty())
//cout<<"null string"<<endl<<(pos-v.begin())<<endl;
}
}
运行结果为: