提升::message_queue::接收/发送不适用于最新版本

Boost::message_queue::receive/send not working with latest version

本文关键字:不适用 适用于 最新版 新版本 message queue 接收 提升      更新时间:2023-10-16

当我使用 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文档

发送和接收的签名需要一个size_type,我使用了 sizeof((,我试图将其转换为 size_type,使用 size_type 变量,但在运行时我收到一个库错误。

谢谢你的帮助。

编辑:对于用户的请求,以下是我收到的不同错误消息,具体取决于我尝试的内容。

#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()

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

在没有看到真正的编译器错误的情况下,我认为问题出在priority上。它应该通过 lvalue-reference 传递,但类型不匹配(应该是无符号的(:

#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.53 和 1.65.1 之间没有变化,但也许你的代码或编译器发生了变化。

科里鲁现场观看

相关文章: