您的位置:首页 > 其它

通过内存映射文件实现进程间数据共享

2008-06-11 12:18 1111 查看
以下方法必须保证进程2启动速度快,在进程1没有关闭内存映射文件前进行读取。

其中的Sleep(1000)就是在等待进程2启动后读取数据。

//Process 1

HANDLE hMapFile;
LPCTSTR pBuf;

hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 256, L"Global//DSMappingObject01");
if (hMapFile == NULL)
{
return 1;
}
pBuf = (LPTSTR)MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 256);

if (pBuf == NULL)
{
return 2;
}

CString sMsg = L"DS testing buffer.";
CopyMemory((PVOID)pBuf, sMsg, sMsg.GetLength());

UnmapViewOfFile(pBuf);

CString sTmp = GenerateFullPathForApp(L"DSUM.exe");
STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.wShowWindow = SW_SHOW;
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));

if (!CreateProcess(NULL, (LPTSTR)(LPCTSTR)sTmp, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
return 3;
}
// Close process and thread handles.
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);

Sleep(1000);
CloseHandle(hMapFile);

//Process 2

HANDLE hMapFile;
LPCTSTR pBuf;

hMapFile = OpenFileMapping(FILE_MAP_READ, FALSE, L"Global//DSMappingObject01");

if (hMapFile == NULL)
{
MessageBox(L"1", TEXT("Process2"), MB_OK);
return 1;
}

pBuf = (LPTSTR) MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, 256);

if (pBuf == NULL)
{
MessageBox(L"2", TEXT("Process2"), MB_OK);
return 2;
}

MessageBox(pBuf, TEXT("Process2"), MB_OK);

UnmapViewOfFile(pBuf);

CloseHandle(hMapFile);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: