我正在寻找关于选择一种可移植的方式来以一种健壮的方式实现本地进程间通信的建议,因为我是C++的新手,并且希望避免摆弄共享内存和锁的常见陷阱;因此,我正在考虑消息传递风格的进程间通信。
我本来打算出于其他原因使用qt的,因此我看了一眼Qt ipc选项。
如果我理解正确的话,qt并没有提供完全可移植的消息传递ipc特性。它可以使用d-bus,但在windows上使用它将是一个问题。其他方式仅限于嵌入式linux平台(我想将其移植到AIX)。
我找不到使用QSharedMemory和QSystemSemaphores的“信号和槽”或消息传递风格的实现
因此:我是否被限制在QSM/QSS上实现一个特性?我还能学些什么呢?posix管道?协议缓冲区?提升队列和消息?
我正在考虑在LGPL/GPL样式许可下发布代码,这是否排除了协议缓冲区或boost库?
请再说一次,接口必须是简单和新手的(否则我肯定会把事情搞砸的: ),类型的序列化/反序列化,错误处理和资源处理也应该如此。
发布于 2009-11-12 03:56:08
看看Boost.Interprocess,它提供了大量的进程间通信功能。我已经使用了进程间message_queue,它提供了一种非常干净和简单的方法来完成我认为您想要做的事情。
发布于 2013-05-03 22:01:19
你也可以在IPC中使用QLocalSocket和QlocalServer。这两个类非常容易使用,而且它们的实现方式几乎与使用Qt套接字客户机/服务器的方式相同。
你可以看看这些youtube视频:
QTCPServer - a basic TCP server application
QTcpServer using multiple threads
(几乎相同的原则将适用于“本地”服务器/客户端,而不是"TCP")
发布于 2017-06-03 15:48:24
作为Qt 5.9,有一个模块,它目前在技术预览名称QtRemoteObjects下,它为QObjects提供了Qt原生IPC,它易于使用,可以用于在两个进程之间共享信号/插槽和模型。
它在Linux、Windows和android上运行良好
https://stackoverflow.com/questions/1717540
复制相似问题