1. 程式人生 > >c++的boost庫學習筆記

c++的boost庫學習筆記

c++的boost庫學習 boost和stlport編譯,編譯過程好麻煩,根據網上教程和boost完全開發指南,加自己摸索才勉強編譯完成,做個筆記總結一下,具體編譯方法,暫且不寫
  1,timer類,用於類似效能測試等計算時間。
下面程式碼是執行緒的helloworld和timer類的使用例子


#include<iostream>
#include<boost/thread/thread.hpp>
#include<boost\timer.hpp>
using namespace std;
using namespace boost;
void hello(){
cout<<"ddd"<<endl;
}
int main(){
timer t;
boost::thread thrd(&hello);
thrd.join();

cout<<t.elapsed_max()/3600<<endl;//最大時間,以小時為單位
cout<<t.elapsed_min()<<endl;//最小統計時間,以秒為單位
cout<<t.elapsed()<<endl;//建立物件開始,時間的流逝
}
2,progress_timer類,繼承至timer類,一個好處是解構函式直接列印時間流逝
例子如下
#include<iostream>
#include<boost/thread/thread.hpp>
#include<boost\timer.hpp>
#include<boost\progress.hpp>
using namespace std;
using namespace boost;
void hello(){
cout<<"ddd"<<endl;
}
int main(){
timer t;
boost::thread thrd(&hello);
thrd.join();

cout<<t.elapsed_max()/3600<<endl;
cout<<t.elapsed_min()<<endl;
cout<<t.elapsed()<<endl;
progress_timer pt;
}
結果解構函式打印出0.00 s
缺點就是win32只能精確到毫秒,linux只能精確到微秒
3,progress_display進度條類,與上面兩個類沒關係
#include<iostream>
#include<boost\progress.hpp>
#include<vector>
#include<fstream>
using namespace std;
using namespace boost;


int main(){
vector<string> v(10000);
ofstream os("C:\\Users\\admin\\Desktop\\boostday2.txt");
progress_display pd(v.size());
vector<string>::iterator pos;
for(pos = v.begin();pos!=v.end();++pos){
os<<*pos<<endl;
++pd;
}
    return 0;
}

缺點是,要保證程式不能有任何可能的輸出,會打亂進度條的顯示,那麼進度條就沒用了,但是它和progress_timer一樣私有繼承了noncopyable,防止被拷貝。

4,date_time類,可以滿足絕大多數程式對時間的要求,但是不能處理1400年以前的時間,但是它的優點是很明顯的,它允許我們更加自由地去操縱時間