Qt 共享内存QSharedMemory使用方法

  • Post author:
  • Post category:其他


原文章:

【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;
}



版权声明:本文为yuchunhai321原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。