当我使用Boost 1.53.0时,我使用了发送和接收,如下所示:
int i=0;
msg_queue.send(&i, sizeof(i), 0);
int number;
unsigned int priority = 0;
boost::interprocess::message_queue::size_type recvd_size;
msg_queue.receive(&number, sizeof(number), recvd_size, priority);
现在使用最新版本1.65.1,我收到一个无效的参数错误,问题似乎是 sizeof() 。
Boost文档在版本1.53.0和1.65.1之间没有变化。 Message_queue Doc
发送和接收的签名需要 size_type ,我使用 sizeof() ,我试过将其强制转换为 size_type ,使用 size_type 变量,但在运行时我会收到库错误。< / p>
感谢您提供帮助。
编辑: 对于用户的请求,这里是根据我尝试的不同的错误消息。
#1 attempt: msg_queue.receive(&number, sizeof(number), recvd_size, priority);
#1 Error at compile time: Invalid arguments 'Canditates are: void send(const void *, ?, unsigned int)'
#1 Comment: Same error for Message_Queue::Send()
相同的代码,在早期版本中,我能够发送和接收值。
答案 0 :(得分:0)
如果没有看到真正的编译器错误,我认为问题出在priority
上。它应该由左值引用传递,但类型不匹配(应该是无符号的):
#include <boost/interprocess/ipc/message_queue.hpp>
namespace bip = boost::interprocess;
bip::message_queue msg_queue(bip::open_or_create, "bla", 10, 10240);
int main() {
int i=0;
msg_queue.send(&i, sizeof(i), 0);
int number;
unsigned priority = 0;
boost::interprocess::message_queue::size_type recvd_size;
msg_queue.receive(&number, sizeof(number), recvd_size, priority);
}