message queue(後文簡寫成mq或訊息佇列)是boost庫中用來封裝程序間通訊的一種實現,同一臺機器上的程序或執行緒可以通過訊息佇列來進行通迅。訊息佇列中的訊息由優先順序、訊息長度、訊息資料三部分組成。這裡需要注意的事,mq只是簡單的將要傳送的資料在記憶體中進行拷貝,所以我們在傳送複雜結構或物件時,我們需要將其序列化後再傳送,接收端接收時要反序列化,也就是說我們要自己去定義區分一條訊息(就是自定義網路通迅協議)。在mq中,我們可以使用三模式去傳送和接收訊息:
阻塞:在傳送訊息時,若訊息佇列滿了,那麼傳送介面將會阻塞直到佇列沒有滿。在接收訊息時,若隊列為空,那麼接收介面也會阻塞直到佇列不空。超時:使用者可以自定義超時時間,在超時時間到了,那麼傳送介面或接收介面都會返回,無論佇列滿或空try:在隊列為空或滿時,都能立即返回
mq使用命名的共享記憶體來實現程序間通訊。共享記憶體換句話來說,就是使用者可以指定乙個名稱來建立一塊共享記憶體,然後像打乙個檔案一樣去開啟這塊共享記憶體,同樣別的程序也可以根據這個名稱來開啟這塊共享記憶體,這樣乙個程序向共享記憶體中寫,另乙個程序就可以從共享記憶體中讀。這裡兩個程序的讀寫就涉及到同步問題。另外,在建立乙個mq時,我們需要指定mq的最大訊息數量以及訊息的最大size。
//create a message_queue. if the queue
//exists throws an exception
message_queue mq
(create_only //only create
,"message_queue" //name
,100 //max message number
,100 //max message size
);
using boost::interprocess;
//creates or opens a message_queue. if the queue
//does not exist creates it, otherwise opens it.
//message number and size are ignored if the queue
//is opened
message_queue mq
(open_or_create //open or create
,"message_queue" //name
,100 //max message number
,100 //max message size
);
using boost::interprocess;
//opens a message_queue. if the queue
//does not exist throws an exception.
message_queue mq
(open_only //only open
,"message_queue" //name
);
使用message_queue::remove("message_queue");來移除乙個指定的訊息佇列。
接下來,我們看乙個使用訊息佇列的生產者與訊息者的例子。第乙個程序做為生產者,第二個程序做為消費者。
生產者程序:
[cpp]view plain
copy
print?
#include
#include
#include
using namespace boost::interprocess;
int main ()
} catch(interprocess_exception &ex)
return 0;
}
消費者程序:
[cpp]view plain
copy
print?
#include
#include
#include
using namespace boost::interprocess;
int main ()
} catch(interprocess_exception &ex)
message_queue::remove("message_queue");
return 0;
}
boost庫中的原子操作
boost庫這中有有關多執行緒的內容,粗略看書,似乎比c 11 的多執行緒好一丟丟。做個讀書筆記,以後忘了可以參考。原子操作 atomic 需要包含標頭檔案 include要用這個標頭檔案,boost庫是需要編譯的,最好是root許可權下編譯,要不會出錯。boost atomica 10 定義a為原...
原創 boost中thread庫的編譯
boost中的thread需要編譯成dll才能使用。首先,獲取boost 可以在cmd中敲入 cvs d pserver anonymous boost.cvs.sourceforge.net cvsroot boost login cvs z3 d pserver anonymous boost....
Boost庫的安裝
windows下的安裝和linux下安裝實際上大同小異,主要是弄清楚一些配置選項,和可執行檔案的作用。目錄為 d boost 1 62 0 step2 開啟命令提示符,找到指定目錄下的bootstrap.bat檔案,並執行 step3 執行生成的bjam.exe檔案 編譯的時間很長,耐心等待這段時間...