共享内存的使用
来源:互联网 发布:linux arp 老化时间 编辑:程序博客网 时间:2024/04/29 16:06
BOOL CShareMemoryImage::InitMap()
{
EnterCriticalSection(&m_cs);
char szBuf[256] = { 0 };
// 获取最小分页大小
SYSTEM_INFO sysinfo;
GetSystemInfo(&sysinfo);
DWORD dwAllocationGranularity = sysinfo.dwAllocationGranularity;
INT64 dwMemoryFileSize = 1024*1024; //指定内存映射文件大小
// 必须要为dwAllocationGranularity(64K)的整数倍
int left = dwMemoryFileSize % dwAllocationGranularity;
if (left != 0)
{
dwMemoryFileSize += (dwAllocationGranularity - left);
}
DWORD dwError = 0;
// 文件方式创建共享内存
HANDLE hFile = CreateFileA(fileName.c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
dwError = GetLastError();
sprintf_s(szBuf, "[CShareMemoryImage]CreateFile failed,GetLastError = %d\n", dwError);
DebugStringA(szBuf);
LeaveCriticalSection(&m_cs);
return FALSE;
}
DebugStringA("[CShareMemoryImage]CreateFile success!\n");
DWORD high = (dwMemoryFileSize >> 32) & 0xFFFFFFFF;// 高32位
DWORD low = dwMemoryFileSize & 0xFFFFFFFF;// 低32位
HANDLE hFileMapping = CreateFileMappingA(
hFile, // system paging file INVALID_HANDLE_VALUE
NULL, // security attributes
PAGE_READWRITE, // protection
high, // high-order DWORD of size
low, // low-order DWORD of size
fileName.c_str()); // name
if (hFileMapping == NULL)
{
dwError = GetLastError();
sprintf_s(szBuf, "[CShareMemoryImage]CreateFileMapping failed,GetLastError = %d\n", dwError);
DebugStringA(szBuf);
CloseHandle(hFile);
LeaveCriticalSection(&m_cs);
return FALSE;
}
else
{
DebugStringA("[CShareMemoryImage]CreateFileMapping success!\n");
LPVOID pViewOfFile = MapViewOfFile( // 映射
hFileMapping, // handle to file-mapping object
FILE_MAP_ALL_ACCESS, // desired access
0,
0,
0); // map all file
if (pViewOfFile == NULL)
{
dwError = GetLastError();
sprintf_s(szBuf, "[CShareMemoryImage]MapViewOfFile failed,GetLastError = %d\n", dwError);
DebugStringA(szBuf);
CloseHandle(hFile);
CloseHandle(hFileMapping);
LeaveCriticalSection(&m_cs);
return FALSE;
}
else
{
sprintf_s(szBuf, "[CShareMemoryImage]MapViewOfFile success,fileName = %s\n", fileName.c_str());
DebugStringA(szBuf);
}
}
LeaveCriticalSection(&m_cs);
return TRUE;
}
- 共享内存的使用
- 共享内存的使用
- 共享内存的使用
- 共享内存的使用
- 共享内存的使用
- 共享内存的使用
- linux 共享内存的使用
- linux 共享内存的使用
- 关于共享内存的使用
- Qt共享内存的使用
- linux 共享内存的使用
- linux共享内存的使用--测试程序
- (内存共享)shmat函数的使用
- 共享内存和信号量的使用
- 共享内存使用的基本思路和接口
- linux共享内存与信号量的使用
- 共享内存的使用-shmget-shmat-shmdt
- eXtremeDB 共享内存使用时的注意事项
- Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析
- ASP.NET 使用Ajax
- Factorial Trailing Zeroes
- 进程与线程的区别(转)
- java基础--继承,抽象,接口
- 共享内存的使用
- 浅谈大型web系统架构
- Unity开发优化----删除多余的MeshCollider和Animation组件
- 《数据结构与算法分析c++描述》读书笔记二——二叉树
- java web项目的访问路径
- 让程序员跳槽的非钱原因
- 关于我的博客
- Activity四种启动方式
- 使用C3P0抛出UnknownHostException异常