QT 共享内存
进程一 写入
实例化QSharedMemory类,并通过函数setKey()设置标志名;
如果共享内存与主进程当前是关联状态,使用函数 detach()分离,然后再创建;
使用函数create()创建共享内存段;
对共享内存进行数据写入;
void WriteShareMemory(char buf[10])
{
QSharedMemory sharememory;
sharememory.setKey("share");
if(sharememory.isAttached())
{
sharememory.detach();
}
QBuffer buffer;
QDataStream out(&buffer);
buffer.open(QBuffer::ReadWrite);
buffer.write(buf);
int size = buffer.size();
if(!sharememory.create(size))
{
qDebug() << sharememory.errorString();
return ;
}
sharememory.lock();
char *dest = reinterpret_cast<char *>(sharememory.data());
const char *source = reinterpret_cast<const char *>(buffer.data().data());
memcpy(dest, source, qMin(size, sharememory.size())); //对共享内存进行数据写入
sharememory.unlock();
}
进程二 读取
实例化QSharedMemory类,并通过函数setKey()设置标志名;
使用函数 attach()将共享内存与主进程关联;
从共享内存中取数据
void ReadShareMemory()
{
QSharedMemory sharememory;
sharememory.setKey("share");//设置标志名
if(!sharememory.attach())
{
qDebug("32456");
}
QBuffer buffer;
sharememory.lock();
buffer.setData((char*)sharememory.constData(),sharememory.size());
buffer.open(QBuffer::ReadWrite);
buffer.readAll();
sharememory.unlock();
sharememory.detach();
qDebug() << buffer.data().data();
}
1128

被折叠的 条评论
为什么被折叠?



