ReadFile的异步读取
在写一个读取虚拟串口的数据的程序,使用Ceadfile的异步模式:
HANDLE hcom = CreateFileW(L"com8",GENERIC_READ|GENERIC_WRITE,0,\
NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,\
NULL);
事件对象设置为人工重置:
dlg->m_ov.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
然后使用ReadFile循环读取
while(true){
ret_value = ReadFile(hcom,bufBk,1024,&recv_num,&dlg->m_ov);
if(!ret_value)
{
lastError=GetLastError();
if(lastError==ERROR_IO_PENDING)
{
WaitForSingleObject(dlg->m_ov.hEvent,INFINITE);
if(dlg->StopScanFlag)
break;
bufBk = bufBk+strlen(bufBk);
continue;
}
}
}
ResetEvent(dlg->m_ov.hEvent);
}
但是读取的时候 发现,WaitForSingleObject每次都是直接返回,也就是ReadFile 每次都会将事件兑现设置为有信号状态,结果是在while与continue之间不断循环。