qt QSharedMemory 用法
2015-11-20 13:23
190 查看
在linux 下使用Qt 的QSharedMemory, 碰到了不能创建共享内存的问题。
sharemem.create 返回false.
经仔细研究,发现在linux 下, sharemem create 失败并不代表错误,
它可能已经被创建了,所以不能再创建同名共享内存了。
linux 共享内存,创建者进程退出时并不会释放共享内存,所以上述问题及易发生。
而windows 在创建者进程退出时,会释放共享内存,这是它们的区别。
想一想,似乎都有道理。windows 粗暴一切,但用法简单。
linux 考虑周到一些,共享内存可以脱离创建者进程独立存在,但用法就复杂一些。
linux 下, 有程序ipcs, ipcrm 来管理,观察共享内存。
把玩如下简单代码: 配合ipcs -m, ipcs -m -p, ipcrm -m 即可理解共享内存了。
sharemem.create 返回false.
经仔细研究,发现在linux 下, sharemem create 失败并不代表错误,
它可能已经被创建了,所以不能再创建同名共享内存了。
linux 共享内存,创建者进程退出时并不会释放共享内存,所以上述问题及易发生。
而windows 在创建者进程退出时,会释放共享内存,这是它们的区别。
想一想,似乎都有道理。windows 粗暴一切,但用法简单。
linux 考虑周到一些,共享内存可以脱离创建者进程独立存在,但用法就复杂一些。
linux 下, 有程序ipcs, ipcrm 来管理,观察共享内存。
把玩如下简单代码: 配合ipcs -m, ipcs -m -p, ipcrm -m 即可理解共享内存了。
#include <QApplication> #include <QSharedMemory> #include <stdio.h> const char *source="only for test"; int main(int argc, char *argv[]) { QApplication a(argc, argv); QSharedMemory sharedmem("hjjdebug"); if(sharedmem.attach()) { if(!sharedmem.detach()) { printf("can't detach from process\n"); } } if (sharedmem.create(1024)) { qDebug("shared memory created."); sharedmem.lock(); char * to = static_cast<char*>(sharedmem.data()); const char * from = source; ::memcpy(to, from, strlen(source)); sharedmem.unlock(); } else if (sharedmem.attach()) { qDebug("shared memory attached."); sharedmem.lock(); const char * data = static_cast<const char*>(sharedmem.constData()); printf("%s\n",data); sharedmem.unlock(); } else { qDebug("error."); } return a.exec(); }
相关文章推荐
- qt 打印信息显示行号
- Qt moc 功能和限制
- Qt之右键菜单实现
- QT创建透明窗体
- Qt Creator快捷键
- Qt Creator快捷键
- Ⅰ.2.9.如何测试支持国际化的Qt AUT
- 使用VS开发Qt项目时编译速度慢的问题解决
- Qt共享内存实现进程间通信(QSharedMemory)
- QTP自动化测试之VBScript对象
- QTP自动化测试之VBScript基础(下)
- QTP自动化测试之VBScript基础(上)
- Qt 实现excel加法
- Qt 查询文档
- Qt的QTabelWidget
- MQTT常见问题
- 关于Qt的事件循环以及QEventLoop的简单使用
- pyqt学习
- QT无法编译#include *.moc的项目,报No such file or directory
- VTK6.2 Qt5.4.0 VS2013