Qt之进程间通信(IPC)
简述
进程间通信,就是在不同进程之间传播或交换信息。那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。但是,系统空间却是“公共场所”,所以内核显然可以提供这样的条件。除此以外,那就是双方都可以访问的外设了。在这个意义上,两个进程当然也可以通过磁盘上的普通文件交换信息,或者通过“注册表”或其它数据库中的某些表项和记录交换信息。广义上这也是进程间通信的手段,但是一般都不把这算作“进程间通信”。
进程间通信(IPC-Interprocess communication)是一组编程接口,能够让程序员协调不同的进程,使之能在一个操作系统里同时运行。这使得一个程序能够在同一时间里处理许多用户的要求。因为即使只有一个用户发出要求,也可能导致一个操作系统中多个进程的运行,进程之间必须互相通话。IPC接口就提供了这种可能性。每个IPC方法均有自己的优点和局限性,因此,对于单个程序而言使用所有的IPC方法并不常见。
- 简述
- 通信目的
- 通信方式
- Qt进程通信
- TCPIP
- Shared Memory
- D-Bus
- QProcess
- Session Management
- 更多参考
通信目的
数据传输:
一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。共享数据:
多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。通知事件:
一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。资源共享:
多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。进程控制:
有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。
进程通过与内核及其它进程之间的互相通信来协调它们的行为。Linux支持多种进程间通信(IPC)机制,信号和管道是其中的两种。
通信方式
管道(pipe):
管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。有名管道(named pipe):
有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。信号量(semophore):
信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其它进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。消息队列(message queue):
消息队列就是消息的一个链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。信号(signal):
信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。共享内存(shared memory):
共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。套接字(socket):
套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
Qt进程通信
在Qt应用程序中,Qt提供了几个方法来实现进程间通信(IPC)。可以在助手中查找关键字”Inter-Process”进行查找。
TCP/IP
跨平台的Qt Network模块提供的类可以让网络编程更加便携和方便。它提供了高级类(例如:QNetworkAccessManager、QFtp)通信,使用特定的应用程序级协议,和较底层的类(例如:QTcpSocket、QTcpServer、QSslSocket)用于实现协议。
Shared Memory
跨平台的QSharedMemory-共享内存类,提供对操作系统的共享内存的实现。它允许多个线程和进程安全访问共享内存段。此外,QSystemSemaphore可以用来控制访问由系统共享的资源,以及进程之间的通信。
D-Bus
Qt的D-Bus模块是一种可用于使用D-Bus协议实现IPC的唯一Unix库。它将Qt的信号和槽机制延伸到IPC级别,允许由一个进程发出的信号被连接到另一个进程的槽。Qt的D-Bus文档已经详细说明如何使用Qt中的D-Bus模块。
QProcess
跨平台类QProcess可以用于启动外部程序作为子进程,并与它们进行通信。它提供了用于监测和控制该子进程状态的API。另外,QProcess为从QIODevice继承的子进程提供了输入/输出通道。
Session Management
在Linux/X11平台上,Qt提供了会话管理的支持。会话允许事件传播到进程,例如,当检测到关机时。进程和应用程序可以执行任何必要的操作,例如:保存打开的文档。
更多参考
- Qt之进程间通信(Windows消息)
- Qt之进程间通信(共享内存)
- Qt之进程间通信(QProcess)
- Qt之进程间通信(TCP/IP)
Qt之进程间通信(IPC)相关推荐
- Qt 之进程间通信(IPC)
Qt 之进程间通信(IPC) 简述 通信目的 通信方式 Qt进程通信 TCP/IP Shared Memory D-Bus QProcess Session Management 更多参考 QT5软件 ...
- 【Qt】进程间通信之QSharedMemory示例
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 编程步骤 04. 写端程序示例 05. 读端程序示例 06. 附录 01. 概述 QSharedMemory提供了多个线程 ...
- Linux进程+进程间通信IPC
一 Linux进程 1) 进程的内存映像 2)解释 BSS段:在采用段式内存管理的架构中,BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Bloc ...
- 进程间通信 IPC、LPC、RPC
原文请见:进程间通信IPC.LPC.RPC 进程间通信(IPC,Inter-Process Communication),指至少两个进程或线程间传送数据或信号的一些技术或方法.进程是计算机系统分配资源 ...
- Qt 之进程间通信(TCP/IP)
Qt 之进程间通信(TCP/IP) 原创 一去丶二三里 发布于2016-02-04 10:19:46 阅读数 15428 收藏 更新于2018-05-30 10:35:06 分类专栏: Qt < ...
- 详解操作系统之进程间通信 IPC (InterProcess Communication)
进程间通信(IPC,Inter-Process Communication),指至少两个进程或线程间传送数据或信号的一些技术或方法. 进程是计算机系统分配资源的最小单位(严格说来是线程).每个进程都有 ...
- Android中进程间通信(IPC)方式总结
IPC为进程间通信或跨进程通信,是指两个进程进行进程间通信的过程.在PC和移动设备上一个进程指的是一个程序或者一个应用,所以我们可以将进程间通信简单理解为不同应用之间的通信,当然这种说法并不严谨. 在 ...
- 漫谈QNX(架构/进程,线程,同步,进程间通信IPC)
(1)架构 说起Blackberry的QNX操作系统, 想必大家都听说过,但到底为什么QNX能如此有名?难道微软的Windows和Linux都不能与之抗衡? 美国NASA的太空接驳飞船也使用QNX操作 ...
- linux:进程间通信 IPC
文章目录 1.管道 1.1.匿名管道 1.2.有名管道 2.信号 3.共享内存 3.1.共享内存接口 3.1.1.生成 key 值 3.1.2.创建共享内存 3.1.3.创建共享内存映射 3.1.4. ...
最新文章
- 优达学城python项目P1:搜索和探索近地天体(NEOs)
- 【Qt】Qt动态库和静态库的创建和使用
- 5首页加载慢_UIViewController 预加载方案浅谈
- 计算机组装与维修说课稿,大班《生活中的数字》说课稿
- 机器人学习--Carnegie Mellon University 认知机器人学课程
- Qt程式异常崩溃处理技巧(Win)
- SAP FSM 学习笔记(二) : SAP FSM的微信接入
- WPF学习笔记(二):初学者避坑实录
- [TypeScript] vs code TSLint常见错误解决方案
- 多线程,多进程实例对比
- 分布式系统设计理念为何这么难学?
- 马库斯:DeepMind新出的机器心智网络不错,但有误导性
- Navicat无法连接SqlServer数据库
- Android ANR原因以及开发时如何预防
- 图档生成bin文件_「嵌入式笔记」hex文件、bin文件、axf文件的区别?
- BarTender数据批量打印软件的入门操作
- 学习笔记5-二层冗余链路
- 在用友U8V13.0erp软件供应链管理的存货核算模块中正常单据记账后,查看存货核算的收发存汇总表时,发现存货有数量但没有结存金额,应如何调整?
- 微信支付和分享到朋友圈-struts版本
- 手机外接usb摄像头软件下载_手机打碟app下载安装_手机打碟软件最新版免费下载...
热门文章
- 集成学习(ensemble learning)(二)
- GitHub上如何进行PR(Pull Request)操作——简版
- 让用户故事真的像故事那样
- android布局加色,android – 如何以编程方式将LinearLayout添加背景颜色,并将权重添加到另一个布局...
- 神策数据张涛:企业服务客户全生命周期运营三步曲:执行反馈
- 神策数据张涛:如何让用户标签价值落地?
- 金融实战篇:最佳数据驱动之城商行
- 图解HTTP学习记录(六)
- python argpare 模块的简单用法
- LLVM3.8停止了旧Windows版本,取消Autoconf,改进Clang