进程间通信
Qt 支持与同一系统或不同系统中运行的进程进行多种通信方式。基本上有三种进程间通信机制:
- 同步原语
- 通用字节级数据的交换
- 结构化消息传递
同步原语
Qt 仅提供一个类用于显式的进程间同步:QSystemSemaphore。一个QSystemSemaphore就像一个可由同一系统中多个进程访问的QSemaphore。它通过“键”全局标识,在 Qt 中由 QNativeIpcKey 类表示。另外,根据操作系统,Qt 可能支持多个不同的内存共享后端;有关更多信息和使用限制,请参阅原生 IPC 键文档。
可以使用位于进程间共享内存中的常规线程同步原语,如互斥锁、等待条件和读写锁。Qt 不提供支持此类操作的类,但应用程序可以使用某些操作系统的低级操作。
其他 Qt 类可用于提供更高层次的锁定,例如通过QLockFile,或者通过获取系统范围的唯一资源。这些技术包括TCP 或UDP 端口或在D-Bus中的已知名称。
字节级数据共享
使用字节级数据,应用程序可以实现它们可能选择的任何通信协议。字节数据的共享可以是面向流的(序列化的)或允许随机访问(类似于QFileDevice::isSequential())。
对于串行通信,Qt 提供了多个不同的类,甚至完整的模块:
- 管道和 FIFO:QFile
- 子进程:QProcess
- 套接字:QTcpSocket,QUdpSocket(在 Qt 网络模块 中)
- HTTP(S):QNetworkAccessManager(在 Qt 网络模块)和 QHttpServer(在 Qt HTTP 服务器 中)
- CoAP(S):QCoapClient(在 Qt CoAP 中)
对于在同一系统中的随机访问数据共享,Qt 提供了QSharedMemory。有关详细信息,请参阅共享内存文档。
结构化消息传递
Qt 还提供了一系列技术,用于与其他进程交换结构化消息。应用程序可以建立在上述字节级别的解决方案之上,例如,通过使用 QJsonDocument 或 QXmlStreamReader / QXmlStreamWriter 通过 HTTP 执行 JSONRPC 或 XMLRPC,或者使用 QCborValue 和 QtCoAP。
用于结构化消息和远程过程调用的专用 Qt 模块包括
© 2024 Qt 公司有限公司。本文件中包含的文档贡献均为各自所有者的版权。本文件提供文档根据免费软件开发基金会发布的 GNU 自由文档许可第 1.3 版 的条款进行许可。Qt 及相关标志是芬兰 Qt 公司及其在全球的子公司和关联公司的商标。所有其他商标均为各自所有者的财产。