我在 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
您的意思是“不等于”还是仅当缓冲区大小小于规定的最大消息大小时才会发生异常?
如果异常只发生在 buffer_size < 300
那么我认为这是可以预料的——图书馆无法可靠地接收到一条可能高达 300 char
的消息。 s 进入一个小于 300 char
的缓冲区尺寸为 s。
相反,您应该使用 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);
关于c++ - boost::进程间消息队列抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53153353/