4

我正在寻找有关选择一种可移植的方式以稳健的方式实现本地 IPC 的建议,因为我是 C++ 新手,并且希望避免摆弄共享内存和锁的常见陷阱;因此我在考虑消息传递风格的 IPC。

无论如何,我正计划出于其他原因使用 qt,因此我查看了 Qt ipc 选项。

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

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

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

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

请再次强调,界面必须简单且防新手(否则我肯定会搞砸事情的大局:)),类型的序列化/反序列化、错误处理和资源处理也应该如此。

4

3 回答 3

4

看看Boost.Interprocess,它提供了很多 IPC 功能。我使用了进程间message_queue,它提供了一种非常干净和简单的方法来做我认为你想做的事情。

于 2009-11-11T19:56:07.993 回答
2

您也可以将QLocalSocketQlocalServer用于 IPC。这两个类真的很容易使用,它们的实现方式几乎与使用 Qt TCP 套接字客户端/服务器的方式相同。

您可以观看其中一些 youtube 视频:

QTCPServer - 一个基本的 TCP 服务器应用程序

QTcpServer 使用多线程

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

于 2013-05-03T14:01:19.343 回答
0

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

它适用于 Linux、Windows 和 android

于 2017-06-03T07:48:23.567 回答