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

それを使用しているプロセスの 1 つで、共有メモリ セグメントを create() する必要があります。ほとんどの場合、最初に開始される「マスター」または「サーバー」プロセスが 1 つあり、このプロセスに特定のサイズの共有メモリを作成させます。

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 に答える