进程间共享内存
发布时间:2010/8/8 12:37:23 来源:城市学习网 编辑:ziteng
修改一:将原来的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);