Qt 进程间通信(IPC)

news/2024/5/19 1:16:28 标签: qt, signal, 平台, 多线程, 跨平台, 嵌入式
Qt 是一个跨平台的应用框架,其进程间通信机制当然可以使用所在平台的进程间通信机制,如在Windows平台上的Message机制、共享内存、文件映射、管道、Socket等。其中,Qt对一些许多平台共有的IPC机制进行了封装。
Qt官方文档中对Qt的IPC机制是这样介绍的:

TCP/IP
其实就是通过网络模块实现的IPC。不过Qt对其进行了封装,并提供了两个层次的API,包括应用程序级的QNetworkAccessManager, QFtp等和底层的QTcpSocket, QTcpServer, QSslSocket等。

Shared Memory(共享内存)
Qt提供了一种安全的共享内存的实现(见QSharedMemory),以便在多线程和多进程编程中安全的使用。另外 QSystemSemaphore可以作为系统共享资源或进程间通信的访问控制。

D-Bus
D_BUS是一种低开销、低延迟的IPC。Qt提供了QtDBus模块,该模块使用D-Bus协议,把信号与槽机制(Signal  and Slot)扩展到进程级别,使得开发者可以在一个进程中发出信号,可以再其他进程定义槽来响应这些信号。

Qt COmmunications Protocol (QCOP)

QCOP 是 Qt 内部的一种通信协议,这种协议用于不同的客户之间在同一地址空间内部或者不同的进程之间的通信。目前,这种机制还只在 Qt 的嵌入式版本中提供。

为实现这种通信机制,Qt 中包括了由 QObject 类继承而来的 QCopChannel 类,该类提供了诸如 send()、isRegistered() 等静态函数,它们可以在脱离对象的情况下使用。为了在 channel 中接收通信数据,用户需要构造一个 QCopChannel 的子类并提供 receive() 函数的重载函数,或者利用 connect() 函数与接收到的信号相联系。值得一提的是,在 Qt 系统中,只提供了 QCOP 协议机制和用于接收消息的类,而如何发送消息则没有提供相应的类供用户使用。

在基于 Qt 的桌面系统 Qtopia(QPE)中,则提供了相应的发送类:QCopEnvelope。用户可以通过该类利用 channel 向其他进程发送消息。该类将通过 QCopChannel 发送 QCop 消息的过程进行了封装,用户只需要调用该类中的相关函数就可以方便地实现进程之间的通信。


http://www.niftyadmin.cn/n/1617928.html

相关文章

企业应用架构模式之工作单元模式

工作单元模式是一种对象-关系行为模式。其定义如下:维护受业务影响的对象列表,并协调变化和并发问题的解决。该模式主要考虑的问题是:数据库的数据读入内存后的数据对象,被改变后在什么时机提交。一般而言,可以有两种提…

企业应用架构模式之标识映射

标识映射也是一种对象-关系行为模式,其定义如下:通过在映射中保存已加载的对象,确保每个对象只加载一次;当要访问他们的时候,通过映射来查找它们。标识映射的主要目的是保持一致性,而不是提高性能。 一般而…

企业应用架构模式之延迟加载

延迟加载也是一种对象-关系行为模式,其定义如下:一个对象,它虽然不包含所需要的所有数据,但是知道如何去获取这些数据。 当一个对象的状态,需要从外部获得时,系统就需要从外部(包括数据库&#…

企业应用架构模式之领域逻辑模式

一般的,企业架构过程从领域层开始的,一些经典的领域逻辑方法也就被称之为领域逻辑模式。主要有:事务脚本、领域模型、表模块。选择依据实际领域逻辑的复杂性,事务脚本是最简单的,而领域模型则比较复杂。 (1…

企业应用架构模式之数据源模式

一旦选择了领域层(见领域逻辑架构模式),就必须决定如何与数据源相联系,这时候的选择是以领域层的选择为基础的。一般里说有以下4种方法:表数据入口、行数据入口、活动记录、数据映射器。称之为数据源架构模式。 &…

企业应用架构模式之对象-关系结构模式

前面已经介绍了对象--关系行为模式,包括工作单元、标识映射、延迟加载,这些都是协调内存对象与关系数据库之间行为操作的一些方法。内存对象与关系数据库除了行为需要协调之外,在结构上也需要一些方法来保证彼此的完整,这就是对象…

企业应用架构模式之对象-关系元数据映射模式

对象-关系元数据映射模式是用来描述数据库中域是如何对应到内存对象中的域的,它包括元数据映射、查询对象、资源库三种模式。 元数据映射:在元数据中保持对象-关系映射的详细信息 该模式最主要的决策是如何根据运行代码来表示元数据中的信息。解决方案有…

企业应用架构模式之Web表现模式

(1)MVC:把用户界面交互分拆到不同的三种角色模型、视图、与控制器上。 模型表示领域信息对象;视图表示UI中模型的显示;控制器获得用户输入,对模型进行操作并更新视图。 MVC关注两个分离:从模型…