【MFC进阶】03共享数据

做两个进程,一个进程把数据写到内存空间,一个进程从内存空间中读取数据.

写数据的进程

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);
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperJun12345

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值