Qt进程间通信 之使用QSharedMemory

本文介绍了Qt库中QSharedMemory在Windows和Unix系统下处理进程间通信的方式。在Windows上,共享内存段会在所有相关进程结束后自动释放;而在Unix中,QSharedMemory对象的析构会导致内存段释放,未正确管理可能导致程序崩溃。
摘要由CSDN通过智能技术生成
应用场景:
比如 QQ 与 QQ 音乐、QQ 影音等共享用户头像。

使用QSharedMemory 入门,看这篇基本就够了。

摘要:
0、  QSharedMemory 是Qt 提供的一种各个平台均有支持的进程间交互的方式。
1、 Qt 使用 QSharedMemory 类操作共享内存段。我们可以把 QSharedMemory 看做一种指针,这种指针指向分配出来的一个共享内存段。而这个共享内存段是由底层的操作系统提供,可以供多个线程或进程使用。因此, QSharedMemory 可以看做是专供 Qt 程序访问这个共享内存段的指针。
2、 进程间通信(Inter-Process Communication,IPC) 离不开平台特性。有关共享内存段,各个平台的实现也有所不同:
  • Windows:QSharedMemory不“拥有”共享内存段。当使用了共享内存段的所有线程或进程中的某一个销毁了QSharedMemory实例,或者所有的都退出,Windows 内核会自动释放共享内存段。
  • Unix:QSharedMemory“拥有”共享内存段。当最后一个线程或进程同共享内存分离,并且调用了QSharedMemory的析构函数之后,Unix 内核会将共享内存段释放。注意,这里与 Windows 不同之处在于,如果使用了共享内存段的线程或进程没有调用QSharedMemory的析构函数,程序将会崩溃。
3、初始化 QSharedMemory 对象时,指定一个字符串名称,两个进程就是用这个字符串识别共享内存的。

这篇的例子是在一个进程里,我来一个在两个进程里实现的。
先在app1里输入fff,点击send。
在app2里点击read,TextLabel会变成fff
代码见最后。win7、qt creator、qt 5.6.2。要用designer自己画一下ui。

Qt官方文档的例子:

使用Dll文件实现进程间通信:
用#pragma data_seg()在DLL中定义一个共享的,有名字的数据段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值