进程间通信

Qt 支持与同一系统或不同系统中运行的进程进行多种通信方式。基本上有三种进程间通信机制:

  1. 同步原语
  2. 通用字节级数据的交换
  3. 结构化消息传递

同步原语

Qt 仅提供一个类用于显式的进程间同步:QSystemSemaphore。一个QSystemSemaphore就像一个可由同一系统中多个进程访问的QSemaphore。它通过“键”全局标识,在 Qt 中由 QNativeIpcKey 类表示。另外,根据操作系统,Qt 可能支持多个不同的内存共享后端;有关更多信息和使用限制,请参阅原生 IPC 键文档。

可以使用位于进程间共享内存中的常规线程同步原语,如互斥锁、等待条件和读写锁。Qt 不提供支持此类操作的类,但应用程序可以使用某些操作系统的低级操作。

其他 Qt 类可用于提供更高层次的锁定,例如通过QLockFile,或者通过获取系统范围的唯一资源。这些技术包括TCPUDP 端口或在D-Bus中的已知名称。

字节级数据共享

使用字节级数据,应用程序可以实现它们可能选择的任何通信协议。字节数据的共享可以是面向流的(序列化的)或允许随机访问(类似于QFileDevice::isSequential())。

对于串行通信,Qt 提供了多个不同的类,甚至完整的模块:

对于在同一系统中的随机访问数据共享,Qt 提供了QSharedMemory。有关详细信息,请参阅共享内存文档。

结构化消息传递

Qt 还提供了一系列技术,用于与其他进程交换结构化消息。应用程序可以建立在上述字节级别的解决方案之上,例如,通过使用 QJsonDocumentQXmlStreamReader / QXmlStreamWriter 通过 HTTP 执行 JSONRPC 或 XMLRPC,或者使用 QCborValue 和 QtCoAP。

用于结构化消息和远程过程调用的专用 Qt 模块包括

© 2024 Qt 公司有限公司。本文件中包含的文档贡献均为各自所有者的版权。本文件提供文档根据免费软件开发基金会发布的 GNU 自由文档许可第 1.3 版 的条款进行许可。Qt 及相关标志是芬兰 Qt 公司及其在全球的子公司和关联公司的商标。所有其他商标均为各自所有者的财产。