// 002_异步IO.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <windows.h>#include <stdio.h>struct MyOverlapped : public OVERLAPPED { MyOverlapped() { // 将OVERLAPPED部分填充为0 memset(this, 0, sizeof(OVERLAPPED)); pBuff = NULL; } char *pBuff; ~MyOverlapped() { if (pBuff) { delete pBuff; } }};DWORD WINAPI ThreadProc(VOID* pArg){ MyOverlapped* pOv = (MyOverlapped*)pArg; WaitForSingleObject(pOv->hEvent,-1); printf("读取偏移:[%d]的IO任务完成, 实际读取到的字节数:%d" "读取到的内容是:%s", pOv->Offset, pOv->InternalHigh, pOv->pBuff); return 0;}int main(){ HANDLE hFile = INVALID_HANDLE_VALUE; hFile = CreateFile( L"002_异步IO.cpp", GENERIC_READ,/*读写方式:只读*/ FILE_SHARE_READ,/*共享方式: 共享读*/ NULL,/*安全描述符*/ OPEN_EXISTING,/*创建标志:存在时才打开*/ FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,/*文件属性和标志:正常属性|重叠IO标志 */ NULL); MyOverlapped* ov = new MyOverlapped; ov->Offset = 0;// 表示从第20个字节开始读 ov->pBuff = new char[200]; memset(ov->pBuff, 0, 200); DWORD read = 0; ov->hEvent = CreateEvent(NULL,/*安全描述符*/ FALSE,/*是否需要手动重置信号*/ FALSE,/*初始是否有信号*/ NULL/*事件对象名(一般为了跨进程使用)*/); ReadFile(hFile, ov->pBuff, 100, &read, ov); MyOverlapped* ov2 =new MyOverlapped; ov2->Offset = 100; ov2->hEvent = CreateEvent(NULL,/*安全描述符*/ FALSE,/*是否需要手动重置信号*/ FALSE,/*初始是否有信号*/ NULL/*事件对象名(一般为了跨进程使用)*/); ov2->pBuff = new char[200]; memset(ov2->pBuff, 0, 200); ReadFile(hFile, ov2->pBuff,100, &read, ov2); CreateThread(0, 0, &ThreadProc, ov2, 0, 0); CreateThread(0, 0, &ThreadProc, ov, 0, 0); while ( 1 ) { Sleep(100); }}