whelk
驱动牛犊
驱动牛犊
  • 注册日期2003-10-08
  • 最后登录2006-10-10
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1039回复:1

USB读问题请教斑竹

楼主#
更多 发布于:2004-01-31 10:18
上位机使用异步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;
}
第一次只能得到实际的数据长度,但是得不到数据的内龙,只有在循环读一次才能得到实际的数据
whelk
驱动牛犊
驱动牛犊
  • 注册日期2003-10-08
  • 最后登录2006-10-10
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-02-01 08:10
顶一下吧
游客

返回顶部