修改一:將原來的CSFMServer和CSFMClient合并為一個類:XShareMemory
使用的方法是一樣的,對于服務(wù)端:
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;
}
修改二:添加了共享內(nèi)存的同步保護
共享數(shù)據(jù)可能在多個線程或多個進程中讀寫,需要進行同步保護。
我采用互斥量來保護:
hMutex = CreateMutex(NULL, FALSE, szMutexName);
......
WaitForSingleObject(hMutex, INFINITE);
memcpy(pData, p, dwSize);
ReleaseMutex(hMutex);
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |