qt共享内存demo

 创建,写入,linux下挂接为0释放实例后释放内存,如果已经存在不能申请,可以attch指定内存后写入

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

using namespace std;
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QSharedMemory *shared = new QSharedMemory("testkey");
    if(!shared->create(4800))
    {
        qDebug()<<"create erro"<<shared->error();
        switch(shared->error())
        {
        case 4:
            qDebug()<<"此内存已经存在";
            break;
        default:
            qDebug()<<"其他错误";
            break;
        }
    }
    else
    {
        qDebug()<<"create success";
    }
    char mstr[4800]={0};
    qDebug()<<"输入测试字符串";
    cin>> mstr;
    qDebug()<<"str:"<<mstr;
    shared->lock();
    char *data = (char*)shared->data();
    memcpy(data,mstr,4800);
    shared->unlock();
    qDebug()<<"等待中,输入任意字符释放内存";
    cin>>mstr;
    shared->detach();
    delete(shared);

    return a.exec();
}

 读,需要attch后读取,使用完后detach

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

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QSharedMemory shared;
    shared.setKey("testkey");
    if(!shared.isAttached())
    {
        shared.attach();
        if(!shared.isAttached())
        {
            qDebug()<<"共享内存进程挂接失败";
            return 0;
        }
        else
        {
            qDebug()<<"共享内存进程挂接成功";
        }
    }
    shared.lock();
    char* str=(char*)shared.data();
    qDebug()<<"str:"<<str;
    shared.unlock();
    shared.detach();
    if(shared.isAttached())
    {
        qDebug()<<"共享内存进程分离失败";
    }
    else
    {
        qDebug()<<"共享内存进程分离成功";
    }

    return a.exec();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值