我在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
并且我不能再传递可变长度缓冲区。
非常感谢。
答案 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);