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

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

概述将包类对象指针装入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 *)…你只需要发送指针,而不是对象本身。

总结

以上是内存溢出为你收集整理的将包类对象指针装入char *作为消息队列全部内容,希望文章能够帮你解决将包类对象指针装入char *作为消息队列所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1211701.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存