阅读:1039回复:1
USB读问题请教斑竹
上位机使用异步io方法从usb读取数据,每次都要读取两次才能得到实际的数据,为什么会这样?请高手指点,我的原码如下:
hUsb=::CreateFile(symLink, GENERIC_WRITE|GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL); 读取函数实现: for (int i=2;i>0;i--) { iReturn=1; if (!ReadFile(hUsb,pData,dwMaxReadLen,dwRealReadLen,&m_ovRead)) { long iLastError=::GetLastError(); if (iLastError==ERROR_IO_PENDING) { switch(::WaitForSingleObject(m_ovRead.hEvent,dwTimeOut)) { case WAIT_OBJECT_0: if (::GetOverlappedResult(hUsb,&m_ovRead,dwRealReadLen,true)) { iReturn=0; } break; case WAIT_TIMEOUT: ::CancelIo(hUsb); iReturn=-1; break; default:; } } } if (iReturn==-1) break; } 第一次只能得到实际的数据长度,但是得不到数据的内龙,只有在循环读一次才能得到实际的数据 |
|
沙发#
发布于:2004-02-01 08:10
顶一下吧
|
|