USB-HID 读/写(重叠)等待单个对象不返回C++
USB-HID Read/Write (Overlapped) WaitForSingleObject does not return C++
我正在尝试通过 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 毫秒。
相关文章:
- 如何限制在C++中为单个类创建的对象数量?
- 为什么平均打印数组元素比打印单个对象慢C++?
- 在C++中有多个指向单个对象的指针的正确方法是什么?
- USB-HID 读/写(重叠)等待单个对象不返回C++
- 使用 new in C++(在 Windows 上)分配大于 2GB 的单个对象
- 从单个.cpp构建共享对象
- OpenCV Otsu的阈值:计算多个Mat对象的单个阈值
- 如何使用每个对象的单个构造函数参数动态分配C++对象数组?
- 如何在考虑对象切片的同时通过传入单个 Base 对象来打印出数组中的对象?
- 可能从单个方法返回不同类型的对象
- 如何使用单个对象调用具有相同名称的两个类函数
- 单个文件库的对象文件 (.o) 与头文件
- 将矩阵建模为单个统一缓冲区对象
- 执行 commaind "systeminfo"后,等待单个对象停止
- 如何在单个 (.a) 存档中仅获取所需的对象文件
- 对象的"this"指针是否等于指向其(单个)基类的指针?
- C++ unordered_map单个对象上的迭代器
- 为多个对象创建单个线程
- 在向量中存储模板化对象(在<int><double>单个向量中存储类、类)
- C 中单个对象的线程安全容器