boost ::进程间消息队列抛出错误

时间:2018-11-05 11:18:18

标签: c++ boost ipc message-queue boost-interprocess

我在Windows中使用boost进程间消息队列,但是遇到一个问题,当max_msg_size不等于buffer_size时,它将引发错误,我的部分代码如下:

//process A
message_queue::remove(name);
m_MQ = std::make_unique<message_queue>(create_only, name,2000,300);
m_MQ->try_send(buffer, buffer_size, 0);

//process B
m_MQ = std::make_unique<message_queue>(open_only, name);
m_MQ->try_receive(buffer, buffer_size, recvd_size, priority);

在这种情况下,如果buffer_size不等于300,它将抛出boost::interprocess_exception::library_error并且我不能再传递可变长度缓冲区。 非常感谢。

1 个答案:

答案 0 :(得分:2)

陈述时...

  

如果buffer_size不等于300,它将抛出   boost :: interprocess_exception :: library_error

您的意思是“不等于”,还是仅当缓冲区大小小于指定的最大消息大小时才发生例外?

如果仅在buffer_size < 300时发生异常,那么我认为这是可以预期的-库无法可靠地将最多300 char s的消息接收到小于大小为300 char

相反,您应该利用boost::interprocess::message_queue::get_max_msg_size来创建适当大小的接收缓冲区...

m_MQ = std::make_unique<message_queue>(open_only, name);
std::vector<char> buffer(m_MQ->get_max_msg_size());
m_MQ->try_receive(buffer.data(), buffer.size(), recvd_size, priority);