网络编程基础_2.等待事件
#include <stdio.h> #include <windows.h> int main() { // 1. 以重叠 IO 的方式打开一个文件 HANDLE FileHandle = CreateFile(L"test.txt", GENERIC_ALL, NULL, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); // 2. 投递第一个 IO 请求,读取 [3 ~ 6] 的字符,初始化一个事件对象 OVERLAPPED OverLapped1 = { 0 }; OverLapped1.Offset = 3; OverLapped1.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); CHAR Buffer1[10] = { 0 }; ReadFile(FileHandle, Buffer1, 4, NULL, &OverLapped1); // 3. 投递第二个 IO 请求,读取 [0 ~ 2] 的字符,初始化一个事件对象 OVERLAPPED OverLapped2 = { 0 }; OverLapped2.Offset = 0; OverLapped2.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); CHAR Buffer2[10] = { 0 }; ReadFile(FileHandle, Buffer2, 3, NULL, &OverLapped2); // 4. 等待重叠结构中更多事件对象句柄,如果有信号就是说明 IO 请求完成了 WaitForSingleObject(OverLapped1.hEvent, INFINITE); WaitForSingleObject(OverLapped2.hEvent, INFINITE); // 5. 为了防止句柄泄露,应该关闭句柄 CloseHandle(OverLapped1.hEvent); CloseHandle(OverLapped2.hEvent); // 缺点: 最终也会阻塞在等待函数,应该要在一个新的线程中进行等待操作 return 0; }