2012-10-15 92 views
1

我試圖運行下面的Qt代碼:QSharedMemory ::拉手犯規存在錯誤

#include <QtCore/QCoreApplication> 
#include <QSharedMemory> 
#include <QDebug> 
QSharedMemory g_objSharedMemory(QString("Shared Memory")); 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 
    if(g_objSharedMemory.isAttached()==false) 
    { 
     qDebug()<<"Shared memory is not attached !!!!trying to attach it\n "; 
     qDebug()<<g_objSharedMemory.errorString(); 
     if(g_objSharedMemory.attach()==false) 
     { 
      qDebug()<<"Failed to attach shared memory to the process!!!!"; 
      qDebug()<<g_objSharedMemory.errorString(); 
      return 0; 
     } 
    } 

    return a.exec(); 
} 

我沒有共享內存段連接到進程。我在Windows XP上構建這些代碼。
我收到了QSharedMemory::handle doesnt exist錯誤。
我該如何解決這個錯誤?

回答

3

您需要在正在使用它的其中一個進程中創建()共享內存段。最有可能的,你有一個「主」或「服務器」,這是最先啓動的過程 - 讓這個過程具有特定尺寸創建共享內存:

qDebug()<<"Creating shared memory ..."; 
if(g_objSharedMemory.create(42) == false) { 
    qDebug() << "Failed to create shared memory!!!!"; 
    qDebug() << g_objSharedMemory.errorString(); 
} 

然後,在你的「奴隸」或「客戶端」進程,您應該可以使用相同的密鑰連接到共享內存。

請注意,create()也會附加進程,因此您不能在主進程中調用attach()。