是否可以通过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 *作为消息队列所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)