我正在努力实现非重叠的USB-HID通信。为此,我正在使用winapi。我从CreateFile开始,它给出了
HANDLE HidDeviceObject = CreateFile (
(LPCTSTR)DevicePath, // Defined earlier
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
NULL,
NULL);
然后,我设置了超时,以便在没有数据发送时不冻结ReadFile。我将其设置为100毫秒后超时(这些计时器可能不正确)。
COMMTIMEOUTS cto;
cto.ReadIntervalTimeout = 0;
cto.ReadTotalTimeoutConstant = 100;
cto.ReadTotalTimeoutMultiplier = 0;
cto.WriteTotalTimeoutConstant = 0;
cto.WriteTotalTimeoutMultiplier = 0;
SetCommTimeouts(HidDeviceObject, &cto);
最后,我创建我的线程,该线程将负责定期读取File。因此,如果我们简化了,我们会有类似的情况
void MyClass::ReadThread() {
while(true) {
Result = ReadFile(HidDeviceObject, &InputReport, Capabilities.InputReportByteLength, &NumberOfBytesRead, NULL);
...
}
}
问题在于,即使设置了超时,ReadFile也不会返回。这可能是什么原因?谢谢。