当前位置:   article > 正文

Qt 之进程间通信(IPC)_qt进程间通信

qt进程间通信

Qt 之进程间通信(IPC)
简述
通信目的
通信方式
Qt进程通信
TCP/IP
Shared Memory
D-Bus
QProcess
Session Management
更多参考
QT5软件开发入门到项目实战PDF(配完整示例代码)(持续更新)
Qt实现IPC进程间通信-mqueue消息队列
QtDBus总结
原文链接:https://blog.csdn.net/liang19890820/article/details/50589285

简述
进程间通信,就是在不同进程之间传播或交换信息。那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。但是,系统空间却是“公共场所”,所以内核显然可以提供这样的条件。除此以外,那就是双方都可以访问的外设了。在这个意义上,两个进程当然也可以通过磁盘上的普通文件交换信息,或者通过“注册表”或其它数据库中的某些表项和记录交换信息。广义上这也是进程间通信的手段,但是一般都不把这算作“进程间通信”。

进程间通信(IPC-Interprocess communication)是一组编程接口,能够让程序员协调不同的进程,使之能在一个操作系统里同时运行。这使得一个程序能够在同一时间里处理许多用户的要求。因为即使只有一个用户发出要求,也可能导致一个操作系统中多个进程的运行,进程之间必须互相通话。IPC接口就提供了这种可能性。每个IPC方法均有自己的优点和局限性,因此,对于单个程序而言使用所有的IPC方法并不常见。

通信目的
数据传输:
一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。

共享数据:
多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。

通知事件:
一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。

资源共享:
多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。

进程控制:
有些进程希望完全控制另一个进程的执行(如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)

QT5软件开发入门到项目实战PDF(配完整示例代码)(持续更新)
https://blog.csdn.net/xiaolong1126626497/article/details/116485145

Qt实现IPC进程间通信-mqueue消息队列
https://blog.csdn.net/weixin_40355471/article/details/113178838?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164706790016780264021641%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164706790016780264021641&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm_bkp-15-113178838.pc_search_quality_down&utm_term=qt+%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97&spm=1018.2226.3001.4187

QtDBus总结
https://blog.csdn.net/czhzasui/article/details/81071383

D-Bus是一种高级的进程间通信机制,它由freedesktop.org项目提供,使用GPL许可证发行。D-Bus最主要的用途是在Linux桌面环境为进程提供通信,同时能将Linux桌面环境和Linux内核事件作为消息传递到进程。注册后的进程可通过总线接收或传递消息,进程也可注册后等待内核事件响应,例如等待网络状态的转变或者计算机发出关机指令。目前,D-Bus已被大多数Linux发行版所采用,开发者可使用D-Bus实现各种复杂的进程间通信任务。
  D-Bus是一个消息总线系统,其功能已涵盖进程间通信的所有需求,并具备一些特殊的用途。D-Bus是三层架构的进程间通信系统,其中包括:
  接口层:接口层由函数库libdbus提供,进程可通过该库使用D-Bus的能力。
  总线层:总线层实际上是由D-Bus总线守护进程提供的。它在Linux系统启动时运行,负责进程间的消息路由和传递,其中包括Linux内核和Linux桌面环境的消息传递。
  包装层:包装层一系列基于特定应用程序框架的Wrapper库。
  在QT中的Dbus是使用的Dbus的包装层libdbus-qt.要查看Dbus总线上的服务和对象可以借助D-Feet工具 。
————————————————
版权声明:本文为CSDN博主「宁静致远2021」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_46577050/article/details/123442954

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/184789
推荐阅读
相关标签
  

闽ICP备14008679号