有什么办法设置一个时间如果读取不成功就跳出ReadFile死循环?

cokeliu 2007-11-03 04:02:26
在USB程序中. 我已经打开和读写一个HID设备的数据. 但是
if(ReadFile(
deviceHandle[IndexInFieldList], // handle of file to read
buffer, // pointer to buffer that receives data
49, // number of bytes to read
&lpNumberOfBytesRead, // pointer to number of bytes read //从第一个字节开始读接收到的数据.
NULL // pointer to structure for data
))
如果HID设备不回复数据时候. 程序就死在这里. 应该是死在ReadFile的子程序里面. 有什么办法设置一个时间如果读取不成功就跳出ReadFile死循环?
...全文
99 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cokeliu 2007-11-06
  • 打赏
  • 举报
回复
谢谢各位. 用了楼上大方法.
//Open file on the device
deviceHandle = CreateFile (deviceDetail->DevicePath,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, // no SECURITY_ATTRIBUTES structure
OPEN_EXISTING, // No special create flags
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
NULL); // No template file
现在读写不会死机. 但
if(ReadFile(
deviceHandle[IndexInFieldList], // handle of file to read
buffer, // pointer to buffer that receives data
49, // number of bytes to read
&lpNumberOfBytesRead, // pointer to number of bytes read //从第一个字节开始读接收到的数据.
&m_OverlappedInputReport // pointer to structure for data
))
读写失败. 读不出数据来. 奇怪.
cokeliu 2007-11-05
  • 打赏
  • 举报
回复
如何设置为异步读? 不是很明白啊. 请教讲详细点.
zhanzhenbo 2007-11-05
  • 打赏
  • 举报
回复
TO :
楼上。
好象 你理解错楼主的意思了。
oushengfen 2007-11-05
  • 打赏
  • 举报
回复
phDeviceHandle = CreateFile(completeDeviceName,GENERIC_READ |GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
NULL);


这是打开文件的方式:
OVERLAPPED主要这个结构。
在读写时,最后一个参数就是异步标志。仔细去看一下MSDN吧,很容易的。
zengrui034 2007-11-04
  • 打赏
  • 举报
回复
这个函数返回值如果小于0的话就表示不成功。。。判断一下做个处理就OK了吧?
zhanzhenbo 2007-11-03
  • 打赏
  • 举报
回复
ReadFile 这个接口中因该不会因为读不出数据而死掉。读不到数据会发生休眠一断时间。
如果设置了同步读的话,则一定要等到读满了指定大小的数据才返回。如果你是交互式比较
频繁的话,则设置为异步读吧。

21,618

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧