QT 共享内存

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();
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值