如何捕获boost message_queue返回false

时间:2014-10-12 11:56:54

标签: c++ boost

我正在使用boost :: interprocess :: message_queue并根据给出的定义 http://www.boost.org/doc/libs/1_35_0/doc/html/boost/interprocess/message_queue.html

message_queue(open_only_t open_only, const char * name);
  • 打开以前创建的进程共享消息队列,其名称为" name"。如果先前未创建或没有可用资源,则该函数返回false。

现在我无法理解的是构造函数如何返回值?虽然它声明" 功能返回false"但afaik message_queue应该是一个构造函数。

如果它确实返回false,我可以在布尔变量中捕获它吗?

1 个答案:

答案 0 :(得分:1)

正如当前文档所示,将抛出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