Qt便携式IPC:只有QSharedMemory?

时间:2009-11-11 19:37:01

标签: c++ qt ipc messages platform-independent

我正在寻找有关选择便携式方式以强大的方式实现本地IPC的建议,因为我是C ++的新手,并希望避免摆弄共享内存和锁的常见陷阱;因此我在考虑消息传递方式ipc。

无论如何我打算将qt用于其他原因,因此我看了一下Qt ipc选项。

如果我理解正确,qt不提供完全可移植的消息传递ipc功能。它可以使用d-bus,但在Windows上使用它将是一个问题。其他方式仅限于嵌入式Linux平台(我想把这个东西移植到AIX)。

我找不到使用QSharedMemory和QSystemSemaphores的“信号和插槽”或消息传递样式实现

因此:我是否仅限于在QSM / QSS上实施功能? 我还可以学习哪些其他选择? posix管?协议缓冲区?提升队列和消息?

我正在考虑在LGPL / GPL风格许可下发布代码,这是否会排除协议缓冲区或提升库?

请再次,界面必须简单且新手证明(否则我肯定会把事情搞砸了很多时间:)),所以应该对类型的序列化/反序列化,错误处理和资源处理。

3 个答案:

答案 0 :(得分:4)

查看提供大量IPC功能的Boost.Interprocess。我使用了进程间message_queue,它提供了一种非常简洁的方法来完成我认为你想做的事情。

答案 1 :(得分:2)

您也可以将QLocalSocketQlocalServer用于IPC。 这两个类非常易于使用,并且可以实现〜与使用Qt TCP套接字客户端/服务器的方式几乎相同。

您可以查看其中一些YouTube视频:

QTCPServer - a basic TCP server application

QTcpServer using multiple threads

(几乎相同的原则适用于“本地”服务器/客户端而不是“TCP”)

答案 2 :(得分:0)

作为Qt 5.9,有一个模块目前处于技术预览名称QtRemoteObjects,它为QObject提供Qt原生IPC,它易于使用,可用于共享信号/插槽以及两个进程之间的模型。

适用于Linux,Windows和Android