微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将包类对象指针装入char *作为消息队列

是否可以通过POSIX消息队列正确安全地传递类对象指针?

例如,

Object *obj = new Object(); mq_send(mqdes,static_cast<char*>&obj,sizeof(obj),1);

并在接收端,执行reinterpret_cast回到我的Object ?

由于消息队列在Linux上使用文件描述符,所以我很好奇它是如何工作的。 我已经尝试失败,但认为我可能做错了什么。

检查Unix消息队列是否为空

POSIX消息队列位于哪里(Linux)?

如何找出一个线程是否有消息队列?

c。multithreading服务器的devise

mq_open() – EACCES,权限被拒绝

使用Nginx + pushstream模块进行长轮询可能会丢失消息吗?

有可能在linux中打开消息队列的元素数量巨大?

MSMQ样本在C + +?

钩入并在Windows消息队列中logging“一切”

IPC消息队列如何发送对的向量

不是真的…只有当对象仅包含基本类型字段和其他具有基本类型字段的结构时。 如果发送一个指针,如果它驻留在另一个进程或另一个系统中,则不能从另一端重用。

也使用继承和虚拟方法的类,它可能是一团糟!

从我的角度来看,最好添加一种Serialize方法

另外传递一个以这种方式序列化的结构体二进制文件是不可移植的,如果你想和其他系统一起使用相同的机制,或者如果你改变了结构体或者像打包对象这样的东西的话,会给你带来一些问题。

一个自定义的序列化反序列化将是首选和更便携,但选择当然是你的。

就像是 …

template<typename T> int SerializeAndSendobject(mqd_t mqdes,const T* instance) { MySerializationStream stream; instance->Serializeto(stream); mq_send(stream.toBuffer(),stream.size()); }

如果你只是在两个线程之间发送,而不是发送对象的内容,我会发送只是指向一个新的对象分配的指针,我会从另一边释放它。 小心,当你处理队列时,你必须首先销毁所有待处理的对象!

Object* pointer = &obj; mq_send(mqdes,static_cast<char*>(pointer),sizeof(Object*),1);

注意sizeof(Object *)…你只需要发送指针,而不是对象本身。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐