进程间共享内存操作简易封装

来源:互联网 发布:手机日记本数据库表 编辑:程序博客网 时间:2024/06/14 22:42

进程间共享内存操作,其中有加锁读写

头文件中定义共享名称和互斥量名称


const LPCTSTR sMemoryFileName = _T("MyShareName");//指定内存映射文件名称const LPCTSTR sMutexName =      _T("MyMutexName");//指定Mutex名称


HANDLE CreateOpenFileMapping(LPCTSTR lpShareMemName){//打开共享的文件对象。 HANDLE hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, lpShareMemName);if (hMapFile){}else{//创建共享文件。 hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, BUF_SIZE, lpShareMemName);}return hMapFile;}///////////////////////////////////////////////////////函数主要对共享内存读写///hMapFile :共享内训映射句柄///bInOutData:写入或者读取数据///lpMutexName:互斥量名字///bRW :读写标志 0 read ; 1 write///返回值 ture成功 ;false 失败/////////////////////////////////////////////////////BOOL OperateData(HANDLE hMapFile, BYTE *bInOutData, LPCTSTR lpMutexName, bool bRW){BOOL bSuc = FALSE;BYTE *pBuf = (BYTE *)MapViewOfFile(hMapFile,            // 共享内存的句柄FILE_MAP_ALL_ACCESS, // 可读写许可0,0,BUF_SIZE);if (pBuf){//加把锁在这地方HANDLE hMutex = CreateMutex(NULL, FALSE, lpMutexName);if (hMutex && WaitForSingleObject(hMutex, 30 * 1000) == WAIT_OBJECT_0){if (bRW){memset(pBuf, 0, BUF_SIZE);memcpy(pBuf, bInOutData, BUF_SIZE - 1);}else{memcpy(bInOutData, pBuf, BUF_SIZE - 1);}ReleaseMutex(hMutex);CloseHandle(hMutex);UnmapViewOfFile(pBuf);hMutex = NULL;pBuf = NULL;bSuc = TRUE;}}return bSuc;}


原创粉丝点击