USB-HID读/写(重叠)WaitForSingleObject不返回C ++

时间:2018-08-14 14:26:14

标签: c++ usb hid

我正在尝试通过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可以使我获得超时代码。那么,此行为的原因是什么。谢谢

1 个答案:

答案 0 :(得分:0)

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

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