通过内存映射文件实现进程间数据共享
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);
其中的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);
相关文章推荐
- 进程间通过内存映射文件共享数据
- UNIX环境高级编程学习之第十五章进程间通信 - 两个进程通过映射普通文件实现共享内存通信
- Win32汇编使用内存映射文件在进程间共享数据
- windows 内存映射文件实现数据共享之原理
- 利用内存映射文件在进程间共享数据
- 用文件映射(File Mapping)实现进程间内存共享
- 用内存映射文件在进程中共享数据
- 用内存映射文件在进程中共享数据
- c++ 内存映射文件进程间共享数据
- 使用内存映射文件在进程间共享数据
- windows笔记-使用内存映射文件在进程之间共享数据
- 【Demo 0115】内存映射方式实现进程间数据共享
- 利用内存映射文件在进程间共享数据
- windows笔记-使用内存映射文件在进程之间共享数据
- 用文件映射(File Mapping)实现进程间内存共享
- 利用内存映射文件在两个进程间共享数据 转
- 使用内存映射文件在进程之间共享数据
- 共享内存 —— 通过SharedPreferences实现进程间数据共享的问题详解
- 使用内存映射文件在进程之间共享数据
- 用文件映射(File Mapping)实现进程间内存共享[转]