以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  进程间共享内存  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=85889)


--  作者:卷积内核
--  发布时间:7/27/2010 2:14:00 PM

--  进程间共享内存
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);


[URL=http://www.vckbase.com/code/downcode.asp?id=3221]下载源代码[/URL]


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.997ms