【问题标题】:boost::interprocess message queue throw errorboost::interprocess 消息队列抛出错误
【发布时间】:2019-04-08 18:01:48
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

当你说...

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

您真的是指“不等于”还是仅当缓冲区大小小于规定的最大消息大小时才发生异常?

如果仅在buffer_size &lt; 300 时发生异常,那么我认为这是可以预料的——库无法可靠地将可能高达 300 chars 的消息接收到小于 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);

【讨论】:

    猜你喜欢
    • 2021-04-20
    • 2021-09-24
    • 2020-11-17
    • 2014-03-04
    • 1970-01-01
    • 2013-07-18
    • 2016-05-29
    • 2013-12-06
    • 1970-01-01
    相关资源
    最近更新 更多