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