下面这段代码中,必须要用for(;;)么?为什么有6次调用CompletionRoutine 函数,却值返回一个“No”呢?不是每次运行完CompletionRoutine 函数就会进入
for(;;)
{
if(WaitForSingleObjectEx(he,INFINITE,TRUE)==WAIT_OBJECT_0)

{
cout<<"运行结束"<<endl;
CloseHandle(he);
CloseHandle(hf);
break;
}
else 
{
cout<<"No"<<endl;
}

}
这个函数从而运行一次"NO"么?(我还以为要显示5次No 呢)!
//利用APCS (Asynchronous Procedure Calls) 来完成I/O 操作
#include<windows.h>
#include<iostream.h>//定义操作数目
#define NUMBER 6
//定义计数个数
int COUNT=0;
//定义OverLapped 数组
OVERLAPPED ol[NUMBER];
//定义事件句柄
HANDLE he;
//定义APCS 函数
VOID WINAPI CompletionRoutine(DWORD dwErrorCode,// completion code
  DWORD dwNumberOfBytesTransfered,  // number of bytes transferred
                              LPOVERLAPPED lpOverlapped)
{
int n=(int)(lpOverlapped->hEvent);
cout<<"第"<<n<<"个Overlapped 操作完成,返回值是 "<<dwErrorCode<<"读取的字节数是"<<dwNumberOfBytesTransfered<<endl;
Sleep(100);
if(++COUNT==NUMBER)
SetEvent(he);
}
void main()
{
cout<<"this is the begin "<<endl;//创建事件
he=CreateEvent(NULL,TRUE,FALSE,NULL);
//创建一个文件
HANDLE hf=CreateFile("e:\\1.txt",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
if (hf!=INVALID_HANDLE_VALUE)
cout<<"文件创建成功"<<endl;
for(int i=0;i<NUMBER;i++)
{
    //初始化OverLapped
memset(ol+i,0,sizeof(OVERLAPPED));
ol[i].Offset=50*i;
ol[i].hEvent=(HANDLE)i; 
char buf[50];
    ReadFileEx(hf,buf,50,ol+i,CompletionRoutine);
  }
for(;;)
{
if(WaitForSingleObjectEx(he,INFINITE,TRUE)==WAIT_OBJECT_0)

{
cout<<"运行结束"<<endl;
CloseHandle(he);
CloseHandle(hf);
break;
}
else 
{
cout<<"No"<<endl;
}

}
cout<<"this is the end"<<endl;
}