进程间通信

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

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

同步原语

Qt XML 只提供了一个用于显式进程间同步的类:QSystemSemaphoreQSystemSemaphore 就像同一系统中多个进程可访问的QSemaphore 。它由一个 "key "进行全局标识,在 Qt XML 中,这个 "key "由QNativeIpcKey 类表示。此外,根据操作系统的不同,Qt 可能支持多个不同的后端来共享内存;更多信息和限制请参阅本地 IPC Keys文档。

可以使用位于进程间共享内存中的常规线程同步原语,如互斥、等待条件和读写锁。Qt 没有提供任何类来支持这一点,但应用程序可以在某些操作系统上使用底层操作。

其他 Qt 类可用于提供更高级别的锁定,如QLockFile ,或通过获取唯一的、系统范围内的资源。此类技术包括TCPUDP ports 或D-Bus 中的知名名称。

字节级数据共享

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

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

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

结构化消息传递

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

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

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.