我写了一个小程序,用BindIoCompletionCallback注册回调函数,程序先写入文件,然后在异步Io回调函数里面去Read.运行的结果是回调函数不停的运行了1s钟(因为我SleepEx了1s钟).这是为什么呢?
#include"stdafx.h"
#include<windows.h>
#include<stdio.h>
#include<tchar.h>
HANDLE hFile,hIocp;
DWORD dwr,dww;
OVERLAPPED overlap={0};
char content[10]={0};
VOID CALLBACK f(DWORD dwErrorCode,DWORD,LPOVERLAPPED){
WaitForSingleObject(hFile,INFINITE);
ReadFile(hFile,content,10,&dwr,&overlap);
printf("读取内容=%s\n",content);
}
int _tmain(int argc, _TCHAR* argv[]){
hFile=CreateFile(_T("e:\\myfile.txt"), GENERIC_READ|GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_FLAG_OVERLAPPED, NULL);
if(INVALID_HANDLE_VALUE==hFile){
printf("CreateFile 失败:%d\n",GetLastError());
return 1;
}
if(!BindIoCompletionCallback(hFile,(LPOVERLAPPED_COMPLETION_ROUTINE)f,0)){
if(ERROR_IO_PENDING != GetLastError()){
printf("Bind failed:%d\n",GetLastError());
return 1;
}
}
WriteFile(hFile,(LPVOID)"helloworld",10,&dww,&overlap); 
SleepEx(1000, TRUE); 
printf("main结束\n"); 
CloseHandle(hFile); 
return 0;
}