1

我正在尝试运行以下 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错误。
我该如何解决这个错误?

4

1 回答 1

3

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

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

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

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

于 2012-10-15T05:58:24.987 回答