5615|6

66

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

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

在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死循环?

最新回复

谢谢各位. 用了楼上大方法. //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         )) 读写失败. 读不出数据来. 奇怪.   详情 回复 发表于 2007-11-6 09:51
点赞 关注

回复
举报

84

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
ReadFile 这个接口中因该不会因为读不出数据而死掉。读不到数据会发生休眠一断时间。
如果设置了同步读的话,则一定要等到读满了指定大小的数据才返回。如果你是交互式比较
频繁的话,则设置为异步读吧。
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这个函数返回值如果小于0的话就表示不成功。。。判断一下做个处理就OK了吧?
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

4
 
TO  :
楼上。
好象 你理解错楼主的意思了。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 
如何设置为异步读? 不是很明白啊. 请教讲详细点.
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
   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吧,很容易的。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

7
 
谢谢各位. 用了楼上大方法.
//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
        ))
读写失败. 读不出数据来. 奇怪.
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表