2014-10-12 21 views
3

我使用boost ::進程間:: message_queue並按照上 http://www.boost.org/doc/libs/1_35_0/doc/html/boost/interprocess/message_queue.html如何捕捉升壓message_queue返回false

message_queue(open_only_t open_only, const char * name); 
  • 給出的定義打開以前創建的進程共享消息隊列的名稱爲「名」。如果之前未創建或沒有可用資源,則該函數返回false。

現在我不明白的是,如何構造函數返回值?雖然它聲明「函數返回false」,但afaik message_queue應該是一個構造函數。

以及如果它返回false我可以捕捉到一個布爾變量?

+1

這是一個錯誤的文件中,一個構造函數不能返回任何東西。 – Mat 2014-10-12 11:59:20

+1

http://www.boost.org/doc/libs/1_56_0/doc/html/boost/interprocess/message_queue_t.html#idp49988992-bb < - 當前版本的文檔 – Mat 2014-10-12 12:01:28

+0

@Mat感謝您的參考。 – Hummingbird 2014-10-12 12:02:54

回答

1

A boost::interprocess::interprocess_exception將被拋出,正如當前的文檔建議。

所以,

using namespace boost::interprocess; 
try { 
    //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 
     ); 
} catch (interprocess_exception const& ipe) 
{ 
    std::cerr << "Error: #" << ipe.get_error_code() << ", " << ipe.what() << "\n"; 
} 

當運行兩次,將打印

Error: #9, File exists 
+0

是啊..我現在正在做同樣的事情,但不幸的是,我正在引用舊的文檔,似乎說構造函數「返回false」,這是什麼讓我感到困擾。無論如何感謝您的答案。 – Hummingbird 2014-10-13 03:21:41