boost::进程间消息队列引发错误
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
,并且我不能再通过可变长度缓冲区。非常感谢。
当您声明。。。
如果buffer_size不等于300,它将抛出boost::interprocess_exception::library_error
您的意思真的是"不等于"吗?还是只有当缓冲区大小小于所述最大消息大小时才会发生异常?
如果只有在buffer_size < 300
的情况下才会发生异常,那么我认为这是意料之中的事——库无法可靠地将多达300个char
秒的消息接收到大小小于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);
相关文章:
- boost::进程间消息队列引发错误
- 尝试将lambda函数放在队列中时出现一般分配器错误(可能是与unique_ptr有关的错误)
- 在C++中创建队列 - 什么是 malloc 错误?
- C++数组队列实现方法错误
- 使用MPI_Gather会导致无法附加到引导队列错误
- 使用 <list> (错误 C2760) 打印队列的元素
- 使用 std::forward_list 返回错误的队列实现
- 更改队列指针成员的值需要在 C++ 中出现奇怪的错误
- 获取错误:之前在此处声明的布尔队列的编辑<T>
- C++:自定义数据类型向量错误的队列
- 为什么STL优先级队列错误地分配了我的类对象
- 前缀表示法 C++,分段错误(堆栈和队列)
- 线程安全队列出现分段错误
- 队列验证层错误:队列族索引在 pCreateInfo->pQueueCreateInfos 数组中不是唯一的
- 交换优先级队列时尝试引用已删除的函数错误
- 为什么我的简单C++程序使用队列和 fstream 错误到无效指针
- 尝试编译队列时static_initialization_and_destruction错误
- 队列类的取消排队方法"Aborted (core dumped)"错误
- 在.c文件接收函数中使用Linux中的MSGGET创建消息队列未实现错误
- 尝试使用堆栈创建队列.为什么我会遇到int转换错误的空白