如何检查是否存在提升消息队列

时间:2018-06-13 14:23:16

标签: c++ boost message-queue

我使用boost message_queue并在一个c ++程序中创建队列并在另一个程序中使用它。

我的问题是,有时第一个程序还没有运行,但第二个程序正在运行。

因此,当我启动第一个程序时,我想知道,如果队列存在。 我不想使用message_queue :: remove(),因为我不想丢失一些数据。

问题是,我怎么知道message_queue" bla_bla_queue"存在与否?

message_queue q(open_only,"q");

2 个答案:

答案 0 :(得分:3)

根据doc

  

打开以前创建的名为“name”的进程共享消息队列。如果先前未创建队列或没有可用资源,则会引发错误。

因此,如果消息队列不存在,您应该能够捕获异常。

simple test_program向我显示,interprocess_exception被抛出,错误代码为7,表示not_found_error

答案 1 :(得分:2)

使用trycatch创建并环绕。阅读文档以找到已经存在的错误代码(针对您的特定版本的提升)(或类似的东西)

检查Boost 1.55 doc以查找该版本中的示例

具体来说,看一下链接代码:

namespace boost {
  namespace interprocess {

    enum error_code_t { no_error = = 0, system_error, other_error, 
                        security_error, read_only_error, io_error, path_error, 
                        not_found_error, busy_error, already_exists_error, 
                        not_empty_error, is_directory_error, 
                        out_of_space_error, out_of_memory_error, 
                        out_of_resource_error, lock_error, sem_error, 
                        mode_error, size_error, corrupted_error, 
                        not_such_file_or_directory, invalid_argument, 
                        timeout_when_locking_error, 
                        timeout_when_waiting_error };

    typedef int native_error_t;
  }
}

有一个

already_exists_error