进程间通讯方式
Qt 提供了四种进程间通信的方式:
使用共享内存(shared memory)交互:这是Qt 提供的一种各个平台均有支持的进程间交互的方式。
TCP/IP:其基本思想就是将同一机器上面的两个进程一个当做服务器,一个当做客户端,二者通过网络协议进行交互。除了两个进程是在同一台机器上,这种交互方式与普通的C/S 程序没有本质区别。Qt 提供了QNetworkAccessManager 对此进行支持。
D-Bus:freedesktop 组织开发的一种低开销、低延迟的IPC 实现。Qt 提供了QtDBus模块,把信号槽机制扩展到进程级别(因此我们前面强调是“普通的”信号槽机制无法实现IPC),使得开发者可以在一个进程中发出信号,由其它进程的槽函数响应信号。
QCOP(Qt COmmunication Protocol):QCOP 是Qt 内部的一种通信协议,用于不同的客户端之间在同一地址空间内部或者不同的进程之间的通信。目前,这种机制只用于Qt for Embedded Linux 版本。进程之间通讯方式种类繁多,在Qt 下,一般使用TCP/IP 比较简单和方便。
使用原因
就难易程度,使用习惯及速度方面,进程间通讯,TCP无疑是很好的。
某次一个相机项目中,需要同时打开使用n个相机,单个进程实现需要对相机提供的SDK 进行很大的改动,所以采用了进程间通讯的方式来完成任务。
首先采用了TCP通讯,所有收发命令都做好后,进行测试,当开启相机实时预览的时候,TCP出现了“假死”,即这边发送消息,另一边怎么都没反应,使用wireshark ,抓包发现,一旦发送了实时预览命