//事件 (串行模型)
//俩个程序 直接的 共享
//状态 做判断
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);
}
}
事件Io
最新推荐文章于 2025-02-15 14:00:44 发布