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

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

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


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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值