【问题标题】:Serialize signals/slot QObjects using shared memory使用共享内存序列化信号/槽 QObjects
【发布时间】:2017-12-15 20:12:55
【问题描述】:

我有两个Qt 应用共享一个内存段。

我希望能够从 App2 发出信号并从 App1 触发插槽。 首先,我需要使用QObject::connect() 将 App2 信号链接到 App1 插槽。

有没有一种连接两个不同Qt 进程信号/插槽机制的好方法?我偶然发现了qt-remote-signals 库来发送远程信号,它使用QDataStream 来序列化对象。 QSharedMemory 使用相同的类。

或者我应该忘记连接任何东西而只是模拟信号/插槽行为?

  1. 从 App2 写入内存段
  2. 从 App1 更改时读取段(如何知道何时更新?)
  3. 从 App1 发出自定义信号
  4. 从 App1 触发插槽

这听起来现实吗?我是共享内存的新手。

【问题讨论】:

    标签: qt signals-slots qsharedmemory


    【解决方案1】:

    据我所知,您无法在进程之间连接 Signal/Slot。如果另一个进程更改了 QSharedMemory,您也无法知道“自然”。

    所以我认为你必须像你说的那样模拟它。

    1. 从 App2 写入内存段
    2. 应用 1 可能会定期检查该段,以了解应用 2 的更改。更改完成后,您直接触发插槽(您实际上并不需要信号)

    如果您需要 App1 的即时响应(不要让 App 1 检查时间太短),您可以让它们使用 QLocalSocket/Server 或 D-Bus 进行通信,但在这种情况下,您可以全力以赴并管理所有通信,使 QSharedMemory 变得不必要。

    【讨论】:

    • 听起来像是对我所发现的内容的一个很好的总结。我将挖掘 D-Bus 协议。
    猜你喜欢
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多