boost::interprocess 消息队列抛出错误

boost::interprocess message queue throw error

我在 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 并且我无法再传递可变长度缓冲区。 非常感谢。

当你声明...

if buffer_size doesn't equal to 300, it will throw boost::interprocess_exception::library_error

您的意思是 "not equal to" 还是仅当缓冲区大小 小于 规定的最大消息大小时才会发生异常?

如果异常仅在 buffer_size < 300 时发生,那么我认为这是可以预料的——库无法可靠地接收可能长达 300 char 秒的消息到缓冲区中尺寸小于 300 chars。

相反,您应该使用 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);