专业网站建设必要性,从化低价网站建设,品牌建设不断深化,企业网站建设的常见流程版权声明#xff1a;若无来源注明#xff0c;Techie亮博客文章均为原创。 转载请以链接形式标明本文标题和地址#xff1a;本文标题#xff1a;QSharedMemory共享内存实现进程间通讯(IPC)及禁止程序多开 本文地址#xff1a;http://techieliang.com/2017/12/685/ 文章… 版权声明若无来源注明Techie亮博客文章均为原创。 转载请以链接形式标明本文标题和地址 本文标题QSharedMemory共享内存实现进程间通讯(IPC)及禁止程序多开 本文地址http://techieliang.com/2017/12/685/ 文章目录 1. 介绍2. 范例3. 禁止程序多开 1. 介绍 很简单的库直接看帮助文档http://doc.qt.io/qt-5/qsharedmemory.html 主要函数设置keycreate向系统申请建立一个内存空间、attach当前进程与内存绑定、detach解除绑定lock/unlock同步锁data/constdata获取内存指针 创建者流程setkey,create,attach,lock,data,操作data,unlock,不用的时候detach 访问者setkey,attach,lock,data,操作data,unlock,不用的时候detach?? 不需要create了 作为创建者应该确定别人也不用了再解绑QSharedMemory析构是也会自动detach一个内存空间如果0个attach时会被销毁数据就没了读写操作记着lock注意不要忘了unlock没有create的key在调用attach时会返回false注意这句在禁止程序多开有用size获取共享内存大小error/errorString是错误信息isAttached判断当前进程是否已经绑定到内存。 2. 范例 偷个懒写到一起了 #include QCoreApplication#include QSharedMemory#include QDebugint main(int argc, char *argv[]) { QCoreApplication a(argc, argv); //创建的同时设置key,也可以setKey QSharedMemory sm(test_shared); //如果是第一个使用必须先创建 //其余进程不需要创建直接attach if(!sm.create(1024)) qDebug()create error; sm.attach();//绑定内存 //attach会返回bool可以不用下面方式判断 if(!sm.isAttached()) qDebug()attach error; sm.lock(); int *memdata static_castint*( sm.data() ); *memdata 1024; sm.unlock(); //如此偷懒想要测试多进程把下面拷走建项目 QSharedMemory testsm(test_shared); testsm.attach(); int *testdata static_castint*( testsm.data() ); qDebug()*testdata; //使当前进程与内存分离析构的时候也会自动调用 sm.detach(); return a.exec();} testsm析构时会调用detach可以吧sm.detach();放在QSharedMemory testsm(“test_shared”);? 就会看到出错了 3. 禁止程序多开 #include QCoreApplication#include QSharedMemoryint main(int argc, char *argv[]) { QCoreApplication a(argc, argv); //创建的同时设置key,也可以setKey QSharedMemory sm(test_shared); if(sm.attach()) return 0; sm.create(1); MainWindow w; w.show(); return a.exec();} 很简单的原理只要有一个开启成功那就会create一个1大小的空间后续再开程序就能attach了然后就return了…… 转载请以链接形式标明本文标题和地址Techie亮博客 » QSharedMemory共享内存实现进程间通讯(IPC)及禁止程序多开 转载于:https://www.cnblogs.com/techiel/p/8035263.html