boost常用庫的使用總結

2021-08-21 06:50:18 字數 3201 閱讀 1789

一、多執行緒:

1、thread庫相關的,c++多執行緒是乙個複雜的事情,windows mfc提供了cwinthread類,waitforsingleobject等待**執行緒;

linux系統提供了createthread,thread join來**執行緒。

boost::thread就比較方便了:

1)、boost::thread(boost::bind(&class::func,this)).detach()。thread()啟動乙個執行緒,bind執行緒繫結的

需要執行的任務接乙個函式指標,detach,父執行緒不需要管子執行緒的**。

2)、boost::thread thd1(func());引數是乙個函式呼叫

thd1.join();父執行緒來進行**。

2、執行緒同步用互斥量boost::mutex,鎖用boost::mutex::scoped_lock,來進行時序控制。

比如boost::mutex::scoped_lock lock(m_mutex);互斥量相當於是鑰匙,lock相當於是鎖,當獲取這個鑰匙的鎖生命週期結束後,則鑰匙釋放。

mutex可以看成是通配的鑰匙。

還有一種是autolocklock (&_opermutex);

二、網路程式設計:

網路程式設計分為同步模式和非同步模式,同步模式是有乙個資料塊客戶端傳送過來,服務端就必須處理完才能處理下乙個資料塊。

非同步模式是客戶端傳送的資料塊放入快取佇列,非同步處理不阻塞,同步模式是阻塞式的。

1、同步模式:

服務端:

// 建立伺服器物件

boost::asio::io_service ios;#asio程式設計必須的io_service物件,服務端和客戶端建立socket和服務端建立acceptor物件要用

boost::asio::ip::tcp::endpoint ep(boost::asio::ip::tcp::v4(),9800);#tcp協議的伺服器所在的ip和網路程式設計開放的埠,客戶端連線的ip和埠

boost::asio::ip::tcp::acceptor acceptor(ios,ep);

// 監聽連線

while(1)

//互動處理

void svr_handle(boost::asio::ip::tcp::socket sock)

客戶端:

// 建立客戶端物件

boost::asio::io_service ios;#asio程式設計必須的io_service物件

boost::asio::ip::tcp::endpoint ep("127.0.0.1",9800);

//監聽連線

std::shared_ptrp_sock(ios);#建立socket連線物件

p_sock->connect(ep);

string msg;

p_sock->write_some(boost::asio::buffer(msg));

char buf[1024];

p_sock->read_some(boost::asio::buffer(buf));

2、非同步模式

服務端:

監聽由同步模式的accept()變成了async_accept();

讀寫由同步模式的write_some()、read_some()變成了async_write_some()、async_read_some()

非同步模式關鍵是void server::run()。

boost::asio::io_service ios;

boost::asio::ip::tcp::endpoint ep(boost::asio::ip::tcp::v4(),9800);

shared_ptrs_ptr(new boost::asio::ip::tcp::socket(ios));

boost::asio::ip::tcp::acceptor acc(ios,ep);

start_accept();

ios.run();

void start_accept()

void handle_accept(shared_ptrs_ptr,boost::system::error_code ec)

if(err) return ;

socket_ptr sock(new ip::tcp::socket(service));

start_accept(sock);

當接收到客戶端連線的時候,handle_accept被呼叫。當連線之後socket則就能使用了。

客戶端:

連線由同步模式的connect()變成了async_connect();

讀寫由同步模式的write_some()、read_some()變成了async_write_some()、async_read_some()

非同步模式關鍵是void client::run()。

boost::asio::io_service ios;

boost::asio::ip::tcp::endpoint ep("127.0.0.1",9800);

//監聽連線

std::shared_ptrp_sock(ios);#建立socket連線物件

p_sock->async_connect(ep,handle_connect);

ios.run();

void handle_connect(const boost::system::error_code ec)

當handle_connect連線上了,則ios.run()就會迴圈退出。

三、檔案系統:

檔案系統相關的方法一般都在boost::filesystem命名空間中。

boost::filesystem::path filepath(path);

filepath.parent_path();//獲取父路徑

filepath.filename();//包括副檔名

boost::filesystem::file_size(filepath);//獲取檔案大小,單位是位元組

boost::filesystem::is_regular_file(path);//判斷是否是普通檔案

boost::filesystem::is_directory(path);//判斷是否是目錄

boost::filesystem::is_symlink(path);//判斷是否是鏈結檔案

Boost庫使用總結

智慧型指標,與引用計數相關 auto ptr 主要為異常安全設計的,在程式正常退出或者異常終止,會呼叫類的析構函式,釋放資源。複製 賦值是損壞性的操作,所以不能繫結到陣列或者變數指標,也不能將auto ptr物件儲存在容器中。auto ptra new int 10 auto ptrb b.rese...

Boost庫的使用

fatal error c1083 無法開啟包括檔案 boost shared ptr.hpp no such file or directory它由c 標準委員會部分成員所設立的boost社群開發並維護,使用了許多現代c 程式設計技術,內容涵蓋字串處理 正規表示式 容器與資料結構 併發程式設計 函...

boost常用庫案例

1.boost any boost any 是一種通用的資料型別,可以將各種型別包裝後統一放入容器內,最重要的它是型別安全的。有點象 com裡面的 variant。使用方法 any type 返回包裝的型別 any cast 可用於 any到其他型別的轉化 include void test any...