进程间通信#
Qt进程间通信功能的概述
Qt支持许多与同一系统或不同系统中的其他进程进行通信的方式。基本上有三种类型的进程间通信机制
同步原语
任意字节级数据的交换
传递结构化消息
同步原语#
Qt仅提供了一个用于显式进程间同步的类:QSystemSemaphore
。一个QSystemSemaphore
就像一个多个进程都可以访问的QSemaphore
。它在全局上通过“密钥”唯一标识,在Qt中被表示为QNativeIpcKey
类。另外,根据操作系统,Qt可能支持多种不同的内存共享后端;有关更多信息和限制,请参阅原生IPC密钥文档。
可以使用位于进程间共享内存区域的普通线程同步原语,如互斥锁、等待条件和读写锁。Qt不提供类来支持这一点,但应用程序可以使用特定操作系统的低级操作。
可以使用其他Qt类提供更高级别的锁定,例如QLockFile
,或者通过获取唯一的、全系统范围资源。这些技术包括TCP或UDP端口或D-Bus中的已知名称。
字节级数据共享{{
使用字节级数据,应用程序可以实现任何它们可能选择的通信协议。字节数据的共享可以是面向流的(序列化)或允许随机访问(类似于isSequential()
的条件)。
对于串行通信,Qt提供了许多不同的类,甚至完整的模块
对于同一系统内的随机访问数据共享,Qt提供了QSharedMemory
。有关详细信息,请参阅共享内存文档。
结构化消息传递{{
Qt 还提供了一些技术与其他进程交换结构化消息的技术。应用程序可以在上述字节级别解决方案的基础上构建,例如使用 QJsonDocument
或 QXmlStreamReader
/ QXmlStreamWriter
通过 HTTP 执行 JSONRPC 或 XMLRPC,或者使用 QtCoAP 的 QCborValue
。
专门用于结构化消息和远程过程调用的 Qt 模块包括
Qt D-Bus
Qt 远程对象
Qt WebSockets