HanDs
NO.2

[Visual Studio文章] 进程间共享内存 





学习中请遵循国家相关法律法规,黑客不作恶。没有网络安全就没有国家安全

本站需要登陆后才能查看

下载源代码

VC知识库14期曾介绍了awzzz提供的共享内存封装类,感觉挺实用的。
在使用的过程中,感觉有点不合自己的使用习惯,于是修改了一下拿出来与大家共享,欢迎批评指正。

修改一:将原来的CSFMServer和CSFMClient合并为一个类:XShareMemory
使用的方法是一样的,对于服务端:
Create("c:\\data.tmp", "MyShareData", 100);
对于客户端
Open(FILE_MAP_READ, "MyShareData");
然后就可以进行读写。

具体请看例子:

void CShareMemTestDlg::OnWrite() 
{
	UpdateData();

	if(!m_ShareMemServer.IsCreated())
		m_ShareMemServer.Create("c:\\data.tmp", "MyShareData", 100);

	m_ShareMemServer.Write((const char *)(LPCTSTR)m_strData, m_strData.GetLength() + 1);
}

CString CShareMemTestDlg::ReadData()
{
	char pData[100];
	memset(pData, 0, 100);
	
	if(!m_ShareMemClient.IsOpened())
		m_ShareMemClient.Open(FILE_MAP_READ, "MyShareData");
	
	CString strData = "";
	if(m_ShareMemClient.Read(pData, 100))
		strData = pData;

	return strData;
}

修改二:添加了共享内存的同步保护
共享数据可能在多个线程或多个进程中读写,需要进行同步保护。
我采用互斥量来保护:

hMutex = CreateMutex(NULL, FALSE, szMutexName);
......
WaitForSingleObject(hMutex, INFINITE);
memcpy(pData, p, dwSize);
ReleaseMutex(hMutex);

欢迎大家批评指正!
参考文档:共享内存封装类 http://www.vckbase.com/document/viewdoc/?id=356


学习中请遵守法律法规,本网站内容均来自于互联网,本网站不负担法律责任
进程 共享 内存
#1楼
发帖时间:2016-7-9   |   查看数:0   |   回复数:0
游客组