【问题标题】:Qt portable IPC: only QSharedMemory?Qt 便携式 IPC:只有 QSharedMemory?
【发布时间】:2010-12-15 14:37:42
【问题描述】:

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

我本来打算使用 qt 还是出于其他原因,因此我查看了 Qt ipc 选项。

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

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

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

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

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

【问题讨论】:

  • 我知道这个线程很旧,但是试试 QLocalSocket 吗?

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    您可以观看以下一些 youtube 视频:

    QTCPServer - a basic TCP server application

    QTcpServer using multiple threads

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

    【讨论】:

      【解决方案3】:

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

      它适用于 Linux、Windows 和 android

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-10
        • 2011-02-01
        • 2011-02-20
        • 2016-06-20
        • 2011-03-06
        • 2013-11-24
        相关资源
        最近更新 更多