Qt 共享内存QSharedMemory使用方法

原文章:【Qt】QSharedMemory类详解_沧海一笑-dj的博客-CSDN博客_qsharedmemory

程序:

#include <QCoreApplication>
#include <QSharedMemory>
#include <QDebug>

/*
 * Qt 共享内存编程思路
 *
 * 共享内存中数据提供方
 * A、定义QSharedMemory shareMemory,并设置标志名shareMemory.setKey();
 * B、将共享内存与主进程分离 shareMemory.detach();
 * C、创建共享内存 shareMemory.create();
 * D、将共享内存上锁shareMemory.lock();
 * E、将进程中要共享的数据拷贝到共享内存中;
 * F、将共享内存解锁shareMemory.unlock();
 *
 *
 * 共享内存中数据使用方:
 * A、定义QSharedMemory shareMemory,并设置与共享内存提供方一致的标志名shareMemory.setKey();
 * B、将共享内存与主进程绑定shareMemory.attach(),使主进程可以访问共享内存的数据;
 * C、将共享内存上锁shareMemory.lock();
 * D、从共享内存中取数据;
 * E、使用完后将共享内存解锁shareMemory.unlock(),并将共享内存与进程分离shareMemory.detach();
 *
*/

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    void *data = nullptr;

    const void *str = "好好学习,天天享受";

    QSharedMemory sharedMemory; //共享内存对象

    //写共享内存
    //1、 设置共享内存key
    sharedMemory.setKey("Qt");
    //2、 判断进程是否与共享内存已经关联,如果已经关联就解除关联
    if(sharedMemory.isAttached()) {//是否附加到共享内存中
        if(!sharedMemory.detach()) { // 从内存中分离进程
            qDebug() << sharedMemory.errorString(); //打印错误信息
            return  -1;
        } else {
            qDebug() << "共享内存关联成功";
        }
    }
    //3、 创建共享内存,同时关联共享内存
    if(sharedMemory.create(1024)) {
        qDebug() << "创建共享内存成功";
    } else {
        qDebug() << sharedMemory.errorString();
        return  -1;
    }
    //4、 将共享内存上锁
    sharedMemory.lock();
    //5、 拷贝数据到共享内存中
    data = sharedMemory.data();
    if(data == nullptr) {
        qDebug() << sharedMemory.errorString();
        sharedMemory.unlock();
        return  -1;
    }
    memcpy(data, str, strlen(static_cast<const char*>(str)));
    //6、 解锁共享内存
    if(!sharedMemory.unlock()) {
        qDebug() << sharedMemory.errorString();
        return -1;
    }

    // 读共享内存
    //7、 将共享内存上锁
    sharedMemory.lock();
    //8、 拷贝数据
    data = sharedMemory.data();
    qDebug() << static_cast<const char*>(data);
    //9、 解锁共享内存
    if(!sharedMemory.unlock()) {
        qDebug() << sharedMemory.errorString();
        return  -1;
    }

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值