<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Qt程序訪問C++創建的共享內存失敗題解

      1、Qt使用QSharedMemory的setKey方法創建內存,共享內存名稱不兼容

        ---Qt的setKey()與C++的CreateFileMapping()命名規則差異

        Qt的QSharedMemory在創建時會自動生成一個native key(如 qipc_sharedmemory_ 前綴),而直接使用setKey()設置的名稱無法與C++的API直接匹配。

        C++創建一個MySharedMemory的共享內存如下,其創建出的共享內存名稱為"MySharedMemory":

      HANDLE hMapFile = CreateFileMapping(
              INVALID_HANDLE_VALUE,   // 使用物理內存而非文件
              NULL,                   // 默認安全屬性
              PAGE_READWRITE,         // 可讀可寫
              0,                      // 內存大小高位
              sizeof(SharedData),     // 內存大小低位
              L"MySharedMemory"       // 共享內存名稱(需唯一)
          );

        Qt使用setKey創建一個MySharedMemory的共享內存如下,其創建出的共享內存名稱為"qipc_sharedmemory_MySharedMemory35...",無法與C++創建的共享內存名稱匹配,所以附加失敗:

      QSharedMemory sharedMem;
      sharedMem.setKey("MySharedMemory");
      QString strKey = sharedMem.nativeKey();
      if (!sharedMem.attach(QSharedMemory::ReadOnly)) {
          qCritical() << u8"附加共享內存失敗:" << sharedMem.errorString();
          return -1;
      }

      2、Qt使用QSharedMemory的setNativeKey方法創建內存,共享內存名稱兼容

        Qt中使用setNativeKey后,Qt的lock()與unlock()將失效,需要自行實現同步機制

        Qt使用setNativeKey創建一個MySharedMemory的共享內存如下,其創建出的共享內存名稱為"MySharedMemory",與C++創建的共享內存名稱兼容,附加成功:

      QSharedMemory sharedMem;
      sharedMem.setNativeKey("MySharedMemory");
      QString strKey = sharedMem.nativeKey();
      if (!sharedMem.attach(QSharedMemory::ReadOnly)) {
          qCritical() << u8"附加共享內存失敗:" << sharedMem.errorString();
          return -1;
      }

       3、Qt訪問C++共享內存的完整實例

      #include <QCoreApplication>
      #include <QSharedMemory>
      #include <QSystemSemaphore>
      #include <QDebug>
      #include <QThread>
      // 必須與 C++ 端的結構體完全一致
      #pragma pack(push, 1)
      struct SharedData {
          int count;
          char buffer[256];
      };
      #pragma pack(pop)
      
      int main(int argc, char *argv[]) {
          QCoreApplication a(argc, argv);
      qDebug()
      <<sizeof (SharedData); // 1. 附加到共享內存(名稱必須包含 Global\\) QSharedMemory sharedMem; sharedMem.setNativeKey("MySharedMemory"); QString strKey = sharedMem.nativeKey(); if (!sharedMem.attach(QSharedMemory::ReadOnly)) { qCritical() << u8"附加共享內存失敗:" << sharedMem.errorString(); return -1; } // 2. 創建/打開信號量(模擬 Windows 互斥體) QSystemSemaphore semaphore("MyMutex", 1, QSystemSemaphore::Open); strKey = semaphore.key(); while (true) { semaphore.acquire(); // 加鎖(阻塞直到可用) // 3. 直接讀取內存數據 sharedMem.lock(); SharedData* data = static_cast<SharedData*>(sharedMem.data()); if (data) { qDebug() << "ID:" << data->count << "Message:" << data->buffer; } else { qWarning() << "內存指針無效"; } sharedMem.unlock(); semaphore.release(); // 解鎖 QThread::msleep(100); } sharedMem.detach(); return 1; }
      posted @ 2025-03-14 16:20  左邊的翼  閱讀(208)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日本无遮挡吸乳呻吟视频| 国产精品视频免费一区二区| 91亚洲精品一区二区三区| 91无码人妻精品一区二区蜜桃| 中文字幕日韩有码av| 欧美日韩在线亚洲二区综二 | 亚洲成在人线AⅤ中文字幕| 丝袜老师办公室里做好紧好爽| 性色欲情网站iwww九文堂| 亚洲国产成人av国产自| 亚洲国产日韩A在线亚洲| 99久久99这里只有免费费精品| 国产系列高清精品第一页| 国产成人啪精品视频免费APP| 国产综合色在线精品| 国产粉嫩区一区二区三区| 久久久av男人的天堂| 国产玩具酱一区二区三区| 97超级碰碰碰碰久久久久| 国产成人精品亚洲午夜麻豆| 亚洲爆乳WWW无码专区| 在线无码免费的毛片视频| 人妻少妇精品视频二区| 亚洲第一狼人天堂网伊人| 国产成人精品av| 国产福利精品一区二区 | 日韩中文字幕v亚洲中文字幕 | 国产精品久久久久aaaa| 亚洲欧美偷国产日韩| 江源县| 国产乱码日产乱码精品精| 成人网站免费在线观看| 少妇人妻偷人精品系列| 国语精品一区二区三区| 开心激情站一区二区三区| 99久久精品午夜一区二区| 欧美亚洲一区二区三区在线| 久久国产精品不只是精品| 亚洲成人资源在线观看| 深田えいみ禁欲后被隔壁人妻| 日韩精品av一区二区三区|