Raveendra M Pai
Raveendra M Pai

Reputation: 445

QSharedMemory::handle doesnt exist error

I'm trying to run the following QT code :

#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();
}

I've failed to attach the shared memory segment to the process. I'm building this code on windows XP.
I'm getting QSharedMemory::handle doesnt exist error.
How can i fix this error?

Upvotes: 1

Views: 1558

Answers (1)

Andreas Fester
Andreas Fester

Reputation: 36630

You need to create() the shared memory segment in one of the processes which are using it. Most likely, you have one "master" or "server" process which is started first - let this process create the shared memory with a specific size:

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

Then, in your "slave" or "client" processes, you should be able to attach to the shared memory with the same key.

Note that create() also attaches the process, so you must not call attach() in the master process.

Upvotes: 3

Related Questions