WriteFile返回错误代码995

WriteFile returning error code 995

本文关键字:错误代码 返回 WriteFile      更新时间:2023-10-16

我已经搜索了stackoverflow并在谷歌上彻底搜索了这个问题,但没有找到为什么会发生这个问题的线索。

我正在用C++编写一个程序,该程序与通过USB连接的测量设备进行通信。该程序是多线程的,几个线程将与设备通信。互斥锁用于保证没有两个线程同时尝试从设备读取或写入。

使用WriteFile将命令发送到设备,使用ReadFile读取响应和测量值-这两个操作都是同步完成的。

有时,在从设备读取测量值时,由于测量设备内部的同步错误,测量会超时失败(GetLastError()返回错误代码121),这是可以预料的。

当我试图继续测量时,通过发送一个新命令,WriteFile有时(大约50%的时间)会失败,GetLastError()返回错误代码995,在MSDN中描述为:

错误操作中止

995 (0x3E3)
The I/O operation has been aborted because of either a thread exit or an application request.

超时发生后不会有线程退出,也不会取消任何读取或写入操作。我只能通过使用CloseHandle和CreateFile关闭并重新打开与设备的通信来恢复通信。然而,这将需要一些时间进行测量,并且不是一个理想的解决方案。

我的问题是,在这种情况下,WriteFile为什么会返回错误代码995,我该怎么做才能避免关闭和重新打开与设备的通信?

请联系USB串行设备的OEM——我们无法进一步帮助您,因为我们无法访问驱动程序的管道。如果设备OEM无法帮助您,请联系USB串行芯片组的制造商;如果他们拒绝帮忙,就把USB到串行适配器扔进垃圾桶,买一个有制造商支持的芯片组(比如FTDI或Silicon Labs USB串行芯片),而不是一些廉价的克隆垃圾。