为了等待多个文件或管道上的I / O,您需要对每个文件发出异步I / O请求,然后等待所述请求的完成.沿着这些方向的东西(未经测试):
HANDLE file1, file2; // initialized somehow
HANDLE events[2];
events[0] = CreateEvent(NULL, TRUE, FALSE, NULL);
events[1] = CreateEvent(NULL, TRUE, FALSE, NULL);
OVERLAPPED overlapped1 = {0};
overlapped1.hEvent = events[0];
OVERLAPPED overlapped2 = {0};
overlapped2.hEvent = events[1];
ReadFile(file1, buffer1, size1, NULL, &overlapped1);
ReadFile(file2, buffer2, size2, NULL, &overlapped2);
WaitForMultipleObjects(2, events, FALSE, INFINITE);
需要在循环中调用ReadFile和WaitForMultipleObjects.您检查WaitForMultipleObjects的返回值以了解哪个操作已完成,使用GetOverlappedResult来发现该操作的结果(是否成功,如果是,它检索了多少字节),处理数据,再次调用该句柄的ReadFile你想从中读更多,然后回到等待.这有点类似于Linux中由select驱动的非阻塞I / O循环.
更高级的技术是I/O completion ports.这允许一个线程池处理大量的异步I / O.常用于Web服务器等,可能对你的情况有些过分.