您的位置:首页 > 编程语言 > Qt开发

QT-IPC-内存共享

2016-06-08 11:15 246 查看
最近开始学习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;
}
本代码只是自己为了测试共享内存调试用的简单实例,欢迎和大家探讨
转载请注明出处
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: