日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

QSharedMemory共享内存实现进程间通讯(IPC)及禁止程序多开

發布時間:2023/12/10 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QSharedMemory共享内存实现进程间通讯(IPC)及禁止程序多开 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
版權聲明:若無來源注明,Techie亮博客文章均為原創。 轉載請以鏈接形式標明本文標題和地址:
本文標題:QSharedMemory共享內存實現進程間通訊(IPC)及禁止程序多開?????本文地址:http://techieliang.com/2017/12/685/ 文章目錄
  • 1. 介紹
  • 2. 范例
  • 3. 禁止程序多開

1. 介紹

很簡單的庫,直接看幫助文檔:http://doc.qt.io/qt-5/qsharedmemory.html

主要函數:設置key,create向系統申請建立一個內存空間、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 <QDebug>
  • int 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_cast<int*>( sm.data() );
  • *memdata = 1024;
  • sm.unlock();
  • //如此偷懶!想要測試多進程把下面拷走建項目
  • QSharedMemory testsm("test_shared");
  • testsm.attach();
  • int *testdata = static_cast<int*>( testsm.data() );
  • qDebug()<<*testdata;
  • //使當前進程與內存分離,析構的時候也會自動調用
  • sm.detach();
  • return a.exec();
  • }
  • testsm析構時會調用detach,可以吧sm.detach();放在QSharedMemory testsm(“test_shared”);? 就會看到出錯了

    3. 禁止程序多開

  • #include <QCoreApplication>
  • #include <QSharedMemory>
  • int 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

    總結

    以上是生活随笔為你收集整理的QSharedMemory共享内存实现进程间通讯(IPC)及禁止程序多开的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。