提升::message_queue::接收/发送不适用于最新版本
Boost::message_queue::receive/send not working with latest version
当我使用 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 之间没有变化,但也许你的代码或编译器发生了变化。
在科里鲁现场观看
相关文章:
- FLTK 2.0构建和演示,适用于VS2019的2011年左右的代码库
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- 为什么 std::erase(std::erase_if) 不是适用于<algorithm>任何容器的模板?
- 为什么这适用于 G++ 而不是 CLANG?
- 为什么不区分大小写适用于 std::unordered_set的 std::hash 函数?
- 声明适用于 auto,但不能显式声明类型?
- 什么是通用运行时组件 #ifdef 适用于Windows(UWP)而不是iOS
- Windows 上的 Cmake 不添加共享库路径(适用于 linux)
- Typedef适用于结构,但不适用于枚举,仅适用于C++
- 为什么函数模板不理解 NULL,但适用于 nullptr
- 链接器读取库,但在其中找不到符号?未解析的外部符号,但仅适用于 Win32 而不是 x64
- Netbeans 8.1(适用于 C/C++)找不到我的编译器(gcc-6.0.0 开发版本)
- random_shuffle() 适用于 Windows,但不能在 Linux 上编译
- C++指针到方法模板推导在面向 x86 时不编译,但适用于 x64
- 不在异常中嵌入std::字符串的规则是否仍然适用于move构造函数
- 移动文件夹Windows c++:适用于Vista及以上版本,不包括XP
- 适用于Android的Qt找不到任何兼容的设备答案找到但不知道如何
- 在Windows 7上不起作用,但它适用于Windows 8 dll。
- 可变参数模板转换为 std::function<R(ARGS...)>适用于 GCC 而不是 MSVC2013,为什么?
- C++11 cmath 函数不在 std 命名空间中,适用于 android NDK w/gcc-4.8 或 clang