USB-HID 读/写(重叠)等待单个对象不返回C++

USB-HID Read/Write (Overlapped) WaitForSingleObject does not return C++

本文关键字:对象 单个 返回 C++ 等待 重叠 USB-HID      更新时间:2023-10-16

我正在尝试通过 USB 隐藏与设备通信。在某些时候,我想使用 winapi 从设备读取数据。我从创建文件开始

HidDeviceObject = CreateFile (
(LPCTSTR)DevicePath,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, //&SecurityAttributes, 
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED, 
NULL);

这部分似乎已经经过测试。然后,我在初始化应用程序时创建一个线程。线程看起来像这样

int result;
BOOL fWaitingOnRead = FALSE;
while(TRUE)
{
if(!write)
{
if (HidDeviceObject != INVALID_HANDLE_VALUE)
{
HIDOverlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
result = ReadFile(HidDeviceObject, &InputReport, Capabilities.InputReportByteLength, &NumberOfBytesRead, &HIDOverlapped);
if (GetLastError() != ERROR_IO_PENDING)   
// Error
else
fWaitingOnRead = TRUE;
if(fWaitingOnRead)
DWORD dwRes = WaitForSingleObject(HIDOverlapped.hEvent, INFINITE);

}
} 
}

执行此代码时知道有来自我的其他 USB 设备的定期数据。但问题是 WaitForSingleObject 不会返回。当然,通过输入例如 500ms 而不是 INFINITE 的值会给我一个超时代码。那么这种行为的原因是什么。谢谢

您正在寻找GetOverlappedResult而不是WaitForSingleObject。不要挑出事件,使用整个OVERLAPPED对象。

GetOverlappedResultEx接受 tiemout 值,如果您再次需要 500 毫秒。