事件Io

来源:互联网 发布:什么是云计算的基础 编辑:程序博客网 时间:2024/05/21 22:35
//事件  (串行模型)//俩个程序 直接的 共享//状态 做判断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){//readBYTE bReadBuffer[100] = { 0 };OVERLAPPED oRead = { 0 };oRead.Offset = 0;//事件内核对象 只能有一份 //一台机子多使用  最重要的是 名字oRead.hEvent = CreateEvent(nullptr, TRUE, FALSE, TEXT("ReadEvent"));//事件内核对象ReadFile(hFile, bReadBuffer, sizeof(bReadBuffer), nullptr, &oRead);//writeBYTE 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  succeedbreak;case 1://write  succeedbreak;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);}}

原创粉丝点击