win32 API:读取未达到时间
-
09-10-2019 - |
题
我正在编写一些代码以与一块硬件接口。硬件通过USB连接到设备内的USB到串行转换器(在Windows中显示为COM端口设备)。
我在Win32 API读取系统调用中遇到问题。我似乎无法像宣传那样工作。我已经设置了通勤结构:
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文档,该文档说:
ReadIntervalTimeOut
在两个字节在通信线上的到达之间,以毫秒为单位,允许的最大时间可以通过。在ReadFile操作期间,收到第一个字节时的时间段开始。如果任何两个字节的到达之间的间隔超过此金额,则 readfile 操作已完成,并返回任何缓冲数据。零值表示不使用间隔超时。
maxdword的值,与两个 readTotalTimeOutConstant 和 readTotalTimeOutMultiplier 成员,指定读取操作是要立即使用已经收到的字节返回,即使没有收到字节。
我发送的命令应该返回一个字节整数。在大多数情况下,设备收到命令,并返回适当的值。但是,有时候,它似乎不会返回一个值和readfile()块,直到收到更多字节为止(例如,按下设备上的按钮)。按下按钮后,我期望收到我将收到的初始整数响应以及按钮按代码。虽然这不是我期望设备本身的行为,但根据MSDN文档,我更关心ReadFile()阻止。这里有readfile()阻止的补救措施吗?
解决方案
哦!事实证明,ReadFile阻塞只是一种症状,而不是问题。所讨论的硬件设备中只有一个4MHz处理器。将写入设备的3个字符命令分开,并在字符之间暂停1毫秒的单独发送问题。
不隶属于 StackOverflow