事件Io

//事件  (串行模型)
//俩个程序 直接的 共享
//状态 做判断
void EventIO()
{
	HANDLE hFile = CreateFile(TEXT("DEMO.txt"),
		GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, nullptr, OPEN_ALWAYS, FILE_FLAG_OVERLAPPED, nullptr);
	if (hFile != INVALID_HANDLE_VALUE)
	{
		//read
		BYTE bReadBuffer[100] = { 0 };
		OVERLAPPED oRead = { 0 };
		oRead.Offset = 0;
		//事件内核对象 只能有一份 
		//一台机子多使用  最重要的是 名字
		oRead.hEvent = CreateEvent(nullptr, TRUE, FALSE, TEXT("ReadEvent"));//事件内核对象
		ReadFile(hFile, bReadBuffer, sizeof(bReadBuffer), nullptr, &oRead);
		
		//write
		BYTE bWriteBuffer[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
		OVERLAPPED oWrite = {0 };
		oWrite.Offset = 0;
		//事件内核对象 只能有一份 
		//一台机子多使用  最重要的是 名字
		oWrite.hEvent = CreateEvent(nullptr, TRUE, FALSE, TEXT("WriteEvent"));//事件内核对象
		WriteFile(hFile, bWriteBuffer, sizeof(bWriteBuffer), nullptr, &oWrite);


		//同步做了俩个 操作

		//其他的线程
		HANDLE hOverlapped[2] = { 0 };
		hOverlapped[0] = oRead.hEvent;
		hOverlapped[1] = oWrite.hEvent;

		while (true)
		{
			DWORD dwCase = WaitForMultipleObjects(2, hOverlapped,/*等待所有是 true*/FALSE, INFINITE);
			switch (dwCase -WAIT_OBJECT_0)
			{
			case 0://read  succeed
					break;
			case 1://write  succeed
				break;
			default:break;
			}
		}
	}
	else
	{
		TCHAR* strErrorMsg;
		FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
			   nullptr, GetLastError(), 0, reinterpret_cast<LPWSTR>(&strErrorMsg), 0, nullptr);
		MessageBox(nullptr, strErrorMsg, L"Error", MB_OK);
		LocalFree(strErrorMsg);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值