各位我正在做一个驱动,使用readfile读数据时,偶尔会等待超时后就会一直不能读数据了,很少情况下出现.我现在是用URB_FUNCTION_ABORT_PIPE或URB_FUNCTION_RESET_PIPE来控制管道,一个是放弃管道的I/O,一个是进行管道复位,具体采用那一个,此种情况,大概是什么原因引起的
读其中的一段代码如下:WIN32的读操作.
if(WaitForSingleObject(osReadOperation.hEvent,WaitTimeOut) != WAIT_OBJECT_0)
{
//DeviceIoControlPipe(phDeviceHandle,5);//放弃管道I/O
DeviceIoControlPipe(phDeviceHandle,3);//管道复位
if(!CloseHandle(osReadOperation.hEvent))
CloseHandle(osReadOperation.hEvent);
return FALSE;
}
个人觉得是reset pipe,要清除pipe的halt/stall状态,pipe才能正常工作,允许更多的通信流量吧。发一个CLEAR_FEATURE,去复位bulk管道,其实就是把一个寄存器的状态从1改成0。