黑马程序员C语言教程:QShareMemory

2022-05-20 03:01:15   第一文档网     [ 字体: ] [ 阅读: ] [ 文档下载 ]
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。下载word有问题请添加QQ:admin处理,感谢您的支持与谅解。点击这里给我发消息

#第一文档网# 导语】以下是®第一文档网的小编为您整理的《黑马程序员C语言教程:QShareMemory》,欢迎阅读!
QShareMemory,黑马,程序员,语言,教程



QSharedMemory



作者: 薛国良

I. 研究来由 II. 注意事 III. 演示代





I. 研究来由

在屏幕共享项目里需要用到共享内存,但是之前对QSharedMemory实在不熟悉,因此在Mac上使用了mmap,而windows系统使用了CreateFileMapping。既然QT提供了跨平台共享内存机制,那么还是研究研究吧。

II. 注意事

QSharedMemory虽然是跨平台的进程间内存共享方案,但是在不同的平台也是有不同的行为的,主要的区别是:



windows平台下,所有的程退出后,即使crash,共享内存象也会被内核销毁

unix平台下,如果有crash致没有用到QSharedMemory的析构函数的,共享内存象不会被内核销毁

以上两句是看QT文档所得,英文水平有限,不一定正确,请验证

setNativeKey这种函数,会导致lock失败,这意味着QT的共享机制被破坏了,所以还是不用了吧。

III. 演示代



#include #include #include








int main(int argc, char* argv[]) {

QApplication app(argc, argv);

// 构造对象

QSharedMemory mem;

// 设置一个key,其他进程通过该key来访问共享内存 mem.setKey("test-key");

// 创建一块共享内存,如果创建成功,那么create内部会调用attach bool ret = mem.create(1024);

qDebug() << "create" << ret << mem.error() << mem.errorString(); if(!ret) {

// 如果创建失败,说明已经有别的进程创建了该key对应的共享内存,那么本进程直接attach,不需要创建/也不能创建 ret















本文来源:https://www.dywdw.cn/c956be75dcccda38376baf1ffc4ffe473368fdda.html

相关推荐
推荐阅读