QT共享内存
来源:互联网 发布:mac怎么玩魔兽世界 编辑:程序博客网 时间:2024/06/05 19:15
使用
- 创建 QSharedMemory 对象
- 调用 create 成员函数分配共享内存,或者 attach 附加到已创建的共享内存
- 使用内存 (注意lock、unlock)
#include <QtCore/QCoreApplication>#include <QtCore/QSharedMemory>int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); QSharedMemory sharedmem("dbzhang800-shared-qt4"); if (sharedmem.create(1024)) { qDebug("shared memory created."); sharedmem.lock(); char * to = static_cast<char*>(sharedmem.data()); const char * from = "from dbzhang800-shared."; ::memcpy(to, from, 24); sharedmem.unlock(); } else if (sharedmem.attach()) { qDebug("shared memory attached."); sharedmem.lock(); const char * data = static_cast<const char*>(sharedmem.constData()); qDebug(data); sharedmem.unlock(); } else { qDebug("error."); } return a.exec();}
Qt源码
源码组织方式
源码位于 src/corelib/kernel/
题外:正是看到这儿,才突然发现 QextSerialPort 源码组织的问题出在了那儿,因为当写 /*! */ 注释块时,发现竟没有合适的地方。
qsharedmemory.h
头文件
qsharedmemory_p.h
私有头文件
qsharedmemory.cpp
类的实现,生成Qt文档的注释块在该文件中
qsharedmemory_win.cpp
类中win相关的实现
qsharedmemory_unix.cpp
类中unix相关的实现
qsharedmemory_symbian.cpp
类中symbian相关的实现
windows部分的实现
简单看一下windows下实现,主要是 QSharedMemoryPrivate 类的几个函数
QSharedMemoryPrivate::create
调用win api函数 CreateFileMapping
QSharedMemoryPrivate::attach
调用win api函数 MapViewOfFile,使用下面handle返回的句柄
QSharedMemoryPrivate::detach
调用win api函数 UnmapViewOfFile
QSharedMemoryPrivate::handle
如果尚未未打开句柄,则调用win api函数 OpenFileMapping
QSharedMemoryPrivate::cleanHandle
调用win api函数 CloseHandle
注意和 QSharedMemory api 中的对应关系:
QSharedMemory::create
调用 d->create, 成功还调用 d->attach
QSharedMemory::attach
d->attach
QSharedMemory::detach
d->detach
lock、unlock
- 这个功能是的实现需要跨进程的 互斥量或信号量来实现,这就是 QSystemSemaphore
- QSystemSemaphore 是Qt4.4 和QSharedMemory 引入的
QSyetemSemqphore 使用练习
#include <QtCore/QCoreApplication>#include <QtCore/QSystemSemaphore>int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); QSystemSemaphore sem("dbzhang800-syssemphore", 1); sem.acquire(); qDebug("ok, system semaphore acquired"); qDebug("you can try run another instance. ^_^"); getchar(); sem.release(); return 0;}
- QT共享内存
- QT共享内存使用
- Qt共享内存读写
- QT-IPC-内存共享
- QT 共享内存
- Qt共享内存的使用
- qt 创建共享内存举例
- QT 共享内存 QSharedMemory 和 内存映射
- QT 进程间通信 之 共享内存
- Qt进程间共享内存例子
- Qt进程间共享内存例子
- QT间进程通信之共享内存
- Qt进程间通信----共享内存
- qt共享内存方法限制执行一次。
- Qt学习—qt共享内存的使用
- 【Qt】Qt之进程间通信(共享内存)【转】
- Qt学习—qt共享内存的使用
- 【共享内存】共享内存
- 窗体控制
- log4net应用实践(一)
- vim复制代码包含注释时格式会乱掉的解决办法
- SignalR触发OnDisconnected事件收集
- Cheat Notes
- QT共享内存
- C#后期绑定操作Excel
- java之单点登录
- java学习心得
- Learn Python The Hard Way-Ecercise6~10
- 简单的函数交换两个数,呵呵。
- linux根据进程号PID查找启动程序的全路径
- Java中3DES加密与C#兼容
- extern "C"的用法解析