网络编程基础_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;
}
原文地址:https://www.cnblogs.com/ltyandy/p/10945956.html