QT-IPC-内存共享

本文介绍了使用QT进行内存共享的实践过程,包括对共享内存的简单封装,提供了仅需两个接口的操作方式,旨在帮助初学者理解并快速上手QT的内存共享机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近开始学习QT,刚实践了下qt的内存共享机制,就MARK下,获取也可以帮助有需要的朋友

感觉内存共享也挺简单的,自己对共享内存做了简单封装,只需两个接口即可实现。。

基本步骤:

写数据:

    //1.设置共享内存的标志名key(存取数据的key必须相同)
    //2.分离共享内存和主进程
    //3.创建共享内存
    //4.共享内存加锁
    //5.将进程中要共享的数据拷贝到共享内存中
    //6.解锁共享内存
读数据:

    //1.设置共享内存的标志名key
    //2.将共享内存与主进程绑定
    //3.共享内存加锁
    //4.从共享内存中提取数据
    //5.解锁共享内存
    //6.将共享内存和主进程分离
就这些,下面贴出完整代码:

//写数据

void shareMemry::setDataToMemry(QString text)
{
    QBuffer buffer;
    buffer.open( QBuffer::ReadWrite );
    QDataStream out( &buffer );
    out << text;
    int size = buffer.size();


    //1.设置共享内存的标志名key(存取数据的key必须相同)
    shareMemory.setKey("share");
    //2.分离共享内存和主进程
    if(shareMemory.isAttached())
    {
        shareMemory.detach();//将该进程与共享内存段分离
    }
    //3.创建共享内存
    if(!shareMemory.create(size))
    {
        qDebug()<<"can't create memory segment";
        qDebug()<<shareMemory.error();
        return;
    }
    qDebug()<<shareMemory.size();
    //4.共享内存加锁
    shareMemory.lock();
    //5.将进程中要共享的数据拷贝到共享内存中
    char *to = (char*)shareMemory.data();
    const char *from = (char*)buffer.data().data();
    memcpy(to,from,qMin(size,shareMemory.size()));//数据从该进程中拷贝到共享数据内存中
    //6.解锁共享内存
    shareMemory.unlock();//共享内层解锁
}

//读数据

QString shareMemry::getDataFromMemry()
{
    QBuffer buffer;
    QDataStream in(&buffer);
    QString strText;

    //1.设置共享内存的标志名key
    shareMemory.setKey("share");//设置标志一定要与共享内存的标志一样
    //2.将共享内存与主进程绑定
    if(!shareMemory.attach())//将shareMemory与该进程绑定使之可以访问shareMemory里的内容
    {
        qDebug()<<"can't attach share memory";
    }
    //3.共享内存加锁
    shareMemory.lock();
    qDebug()<<shareMemory.size();
    //4.从共享内存中提取数据
    buffer.setData((char*)shareMemory.constData(), shareMemory.size());
    buffer.open(QBuffer::ReadOnly);
    in >> strText;
    //5.解锁共享内存
    shareMemory.unlock();//将shareMemory解锁
    //6.将共享内存和主进程分离
    shareMemory.detach();//将shareMemeory与该进程分离

    return strText;
}



本代码只是自己为了测试共享内存调试用的简单实例,欢迎和大家探讨

转载请注明出处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值