原文章:【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;
}