Boost :: message_queue :: receive / send无法使用最新版本

时间:2017-11-11 01:18:04

标签: c++ boost

当我使用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()

相同的代码,在早期版本中,我能够发送和接收值。

1 个答案:

答案 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);
}

事实上,Boost并没有在1.531.65.1之间发生变化,但也许你的代码或编译器确实发生了变化。

查看 Live On Coliru