我正在尝试通过usb hid与设备通信。在某些情况下,我想使用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,将得到超时代码。那么这种行为的原因是什么呢?谢谢
发布于 2018-08-14 22:59:34
您正在寻找的是GetOverlappedResult而不是WaitForSingleObject。不要挑选事件,使用整个OVERLAPPED对象。
如果您再次需要500毫秒,GetOverlappedResultEx将接受tiemout值。
https://stackoverflow.com/questions/51843784
复制相似问题