我对Win32 API ReadFile系统调用有问题。我好像不能让它像广告上说的那样工作。我已经设置了COMMTIMEOUTS结构,如下所示:
COMMTIMEOUTS ct;
ct.ReadIntervalTimeout = MAXDWORD;
ct.ReadTotalTimeoutconstant = 0;
ct.ReadTotalTimeoutMultiplier = 0;
ct.WriteTotalTimeoutConstant = 0;
ct.WriteTotalTimeoutMultiplier = 0;
if(SetCommTimeouts(device_id_, &ct) == 0)
{
return ERROR; // this is never hit.
}
根据Win32 API文档,它说:
最长时间
允许在到达之间经过
两个字节的通信
ReadFile操作,时间段
收到。如果
金额
读取文件
操作是
返回。值为零表示
不使用间隔超时。
MAXDWORD的值,与
两个的零值
ReadTotalTimeoutConstant
和
ReadTotalTimeout乘数
成员,
立即返回字节
已经收到了,甚至
如果没有收到字节。
我发送的命令应该返回一个单字节整数。大多数情况下,该命令由设备接收并返回适当的值。但是,有时在接收到更多字节之前(例如通过按下设备上的按钮),它似乎不会返回值和ReadFile()块。一旦按下一个按钮,就会收到我期望的初始整数响应以及按钮按下代码。虽然这不是我期望的设备本身的行为,但根据MSDN文档,我更关心的是ReadFile()阻塞,当它不应该被阻塞时。这里有没有解决ReadFile()阻塞的方法?