MFC-内存映射实现数据共享
来源:互联网 发布:马桶推荐 知乎 编辑:程序博客网 时间:2024/05/18 02:02
做两个进程,一个进程把数据写到内存空间,一个进程从内存空间中读取数据.
写数据的进程:
1.定义两个成员变量
HANDLE m_hMapObject;//映射对象句柄 LPTSTR m_pszMapView;//指向映射的地址空间
2.在初始化对话框中获取一块内存空间以便写入
//创建映射对象 m_hMapObject = CreateFileMapping( (HANDLE)0xffffffff, //因为不是读写文件,所以不需要文件句柄 nullptr, //默认安全属性 PAGE_READWRITE, //可读写 0, //高32位不用 0x1000, //用低32位,大小为4k TEXT("ShareData") //共享数据的名字 ); if (!m_hMapObject) { AfxMessageBox(TEXT("创建映射对象失败")); return FALSE; } //获取一块内存空间以便写入数据 m_pszMapView = (LPTSTR)MapViewOfFile(m_hMapObject, FILE_SHARE_WRITE, 0, 0, 0); if (!m_pszMapView) { AfxMessageBox(TEXT("映射数据失败")); return FALSE; }
3.写入数据
//把编辑框的数据读到内存空间 UpdateData(); lstrcpy(m_pszMapView, m_send);
读取数据进程:
1.定义两个成员变量
HANDLE m_hMapObject;//映射对象句柄 LPTSTR m_pszMapView;
2.在初始化对话框中打开映射对象,并获取共享数据的内存地址,然后定时显示获取的数据
//打开映射对象 m_hMapObject = OpenFileMapping( FILE_MAP_READ, //可读映射 FALSE, //不被继承 TEXT("ShareData")//共享数据的名称 ); if (!m_hMapObject) { AfxMessageBox(TEXT("打开映射失败")); return FALSE; } //读取共享数据,只要得到这块共享内存的地址,只要里面的数据发生改变,m_pszMapView也会跟着改变 m_pszMapView = (LPTSTR)MapViewOfFile(m_hMapObject, FILE_SHARE_READ, 0, 0, 0); if (!m_pszMapView) { AfxMessageBox(TEXT("读取映射数据失败")); return FALSE; } //设置一个定时器,一定间隔时间显示所接收的数据 SetTimer(1, 50, nullptr);
3.在定时器函数中定时显示共享数据
void CMFCTEST1Dlg::OnTimer(UINT_PTR nIDEvent){ // TODO: 在此添加消息处理程序代码和/或调用默认值 SetDlgItemText(IDC_STATIC_RECV, m_pszMapView); CDialogEx::OnTimer(nIDEvent);}
4.窗口销毁时关闭定时器
void CMFCTEST1Dlg::OnDestroy(){ CDialogEx::OnDestroy(); // TODO: 在此处添加消息处理程序代码 KillTimer(1);}
同理,可以把一些大的文件放到共享内存中,然后给其它进程读取.
0 0
- MFC-内存映射实现数据共享
- 通过内存映射文件实现进程间数据共享
- windows 内存映射文件实现数据共享之原理
- 内存映射文件实现共享内存
- c#实现内存映射文件共享内存
- 使用内存文件映射实现共享内存
- 数据共享,内存映射文件和虚拟内存,共享内存
- 文件映射,共享内存的实现
- 内存映射,共享内存
- DLL实现数据内存共享
- delphi通过使用“内存映射文件”,实现内存共享
- CreateFileMapping映射共享内存
- mmap 共享 内存映射
- 共享内存映射
- 利用内存映射文件在两个进程间共享数据
- 用内存映射文件在进程中共享数据
- 使用内存映射文件在进程之间共享数据
- 用内存映射在多个应用程序之间共享数据
- Linux Shell 学习笔记1:Shell程序的运行及基本介绍
- 游戏中的角色类2
- LeetCode #015 3Sum
- Android的摄像头操作随笔记
- [总结]视音频编解码技术零基础学习方法
- MFC-内存映射实现数据共享
- iOS开发之 [NSNull length]:unrecognized selector sent to instance
- 3.1趣味整数之亲密数
- 硬件电路设计流程及步骤
- 开启Mysql的慢查询日志
- acm 1007 接力问题
- [转] iOS中文版资源库,非常全
- 枚举和#define宏之间的区别
- 【设计模式C++】工厂模式