gpt4 book ai didi

c - 区分设备断开超时

转载 作者:太空宇宙 更新时间:2023-11-04 00:09:38 25 4
gpt4 key购买 nike

使用 ReadFile 时在通信资源上,可以通过检查读取的字节数是否少于请求的字节数来检测读取超时。比如我要读取1个字节,如果读取超时,返回0个字节,函数成功。

但是,当我断开设备与 COM 端口的连接(在读取一些字节后)并在其旧句柄上开始读取操作时,同样的事情发生了:函数成功并表示返回了 0 个字节。

由于当前没有可用数据,我如何区分设备断开连接和简单读取超时?

目前,我正在检查是否返回了 0 个字节,如果是,我会检查设备是否仍在使用 WMI 连接。然而,这看起来不是很干净,我希望我能在这里找到更好的解决方案。

更新

有关该设备的更多信息(如评论中所述):

dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fRtsControl = RTS_CONTROL_ENABLE;

CTS 和 DSR 都在数据传输期间设置,并且在通过从 USB 端口拔下数据线断开设备连接后设置。

最佳答案

如果您使用的是 Windows,您可能需要 SetCommTimeoutsFunction .您还应该查看 othe communications functions用于处理 RS232。

编辑:当我将一些代码从具有实际 RS232 的手持设备移动到具有 USB RS232 的手持设备时,我遇到了非常相似的情况。摆动 USB,端口将在应用程序不知情的情况下“丢失”。我为解决这个问题编写的代码如下(Win32 平台)

COMMTIMEOUTS    CTO;
CTO.ReadIntervalTimeout = 500;
CTO.ReadTotalTimeoutConstant = 500;
CTO.ReadTotalTimeoutMultiplier = 0;
if (SetCommTimeouts(hPort,&CTO) == 0)
{
DWORD dwError = GetLastError();
if (dwError == 5)
{
// Access denied, possibly loose USB, return error code or throw exception
return Housten__We_have_a_problem;
}
}

关于c - 区分设备断开超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6748207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com