我已经搜索了stackoverflow并彻底搜索了这个问题,但是没能找到解决这个问题的原因。
我正在用C ++编写一个程序,它与通过USB连接的测量设备进行通信。该程序是多线程的,并且多个线程将与设备通信。互斥锁用于保证没有两个线程同时尝试从设备读取或写入。
使用WriteFile将命令发送到设备,并使用ReadFile读取响应和测量值 - 两个操作都是同步完成的。
有时,当从设备读取测量值时,测量会因超时而失败(GetLastError()返回错误代码121),这是由于测量设备本身内部存在同步错误 - 这是正常的和预期的。
当我尝试继续测量时,通过发送一个新命令,WriteFile有时会(大约50%的时间)失败,GetLastError()返回错误代码995,在MSDN中描述为:
ERROR_OPERATION_ABORTED
995 (0x3E3) The I/O operation has been aborted because of either a thread exit or an application request.
超时发生后没有线程退出,并且没有取消任何读取或写入操作。我只能通过使用CloseHandle和CreateFile关闭并重新打开与设备的通信来恢复通信。但是,测量需要一些时间,并不是理想的解决方案。
我的问题是,为什么WriteFile会在这种情况下返回错误代码995,我该怎么做才能避免关闭并重新打开与设备的通信?
答案 0 :(得分:2)
联系USB串口设备的OEM - 我们无法帮助您进一步解决此问题,因为我们无法访问驱动程序的管道。如果设备OEM无法帮助您 - 请联系USB串行芯片组的制造商;如果他们拒绝提供帮助,将USB转串口适配器扔进垃圾箱,买一个实际上有制造商支持的芯片组(如FTDI或Silicon Labs USB串口芯片),而不是一些廉价的克隆垃圾。 / p>