代码之家  ›  专栏  ›  技术社区  ›  Grant Limberg

Win32 API:ReadFile未超时

  •  1
  • Grant Limberg  · 技术社区  · 14 年前

    我对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()阻塞的方法?

    1 回复  |  直到 14 年前
        1
  •  0
  •   Grant Limberg    14 年前

    哦!结果发现ReadFile阻塞只是一种症状,而不是问题。有问题的硬件设备只有一个4MHz处理器。拆分写入设备的3个字符的命令,并在字符之间间隔1毫秒分别发送它们,可以解决此问题。