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;
}
本代码只是自己为了测试共享内存调试用的简单实例,欢迎和大家探讨
转载请注明出处
相关文章推荐
- Qt之OpenSSL
- Qt之OpenSSL
- Qt Icon from Pixmap from data.一款好友列表demo
- Qt学习笔记
- Qt之StyleSheet用法
- QTableWidget常用(转载)
- Qt里怎么处理二进制数据
- 查看Qt中可用的数据库插件
- QT里添加图标复制到另外电脑后不显示解决方法
- Qt下的udp编程
- Qt 在win中使用第三方库的使用方法
- PyQt5学习笔记003——Qt的架构
- Qt 学习使用qt
- Qt下实现的炉石计算器
- qt/e5.6.0 ubuntu16.04 make问题
- qt creator : error: Exception at 0x772e93d0, code: 0xc0000409: , flags=0x1 (execution cannot be c
- volley(5) 参数total_remain:totalqty, data:[{ bar_status:XX , bar_code: "XX",bar_remain:XX, bar_whcode:"XX" , bar_prodcode:"XX",bar_id:XX,bar_location: "XX", pr_detail: "XX" , bar_batchcode:method:POST
- 在学习QT过程中调试slot出现的问题
- qt中的委托-简单的应用
- QT学习笔记(丁松林课程讲解)