QSharedMemory :: handle不存在错误

时间:2012-10-15 05:44:59

标签: qt qt4

我正在尝试运行以下QT代码:

#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错误 我该如何解决这个错误?

1 个答案:

答案 0 :(得分:3)

您需要在使用它的其中一个进程中创建()共享内存段。最有可能的是,您有一个首先启动的“主”或“服务器”进程 - 让此进程创建具有特定大小的共享内存:

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

然后,在“slave”或“client”进程中,您应该能够使用相同的密钥附加到共享内存。

请注意,create()也会附加进程,因此您不能在主进程中调用attach()。