我的代码基本上遵循MS recommendations关于如何查找和获取HID集合的句柄。然后,我使用这个句柄来获得相应的预分析数据,从中我得到了我需要的数据。
目前,我的代码每次用户需要获取数据时都会这样做(例如按钮数,轴最小/最大值)。这是一个缓慢的业务。剖析器明确指出,主要罪魁祸首是 SetupDiGetClassDevs(),这似乎很慢。
无法保存句柄(或者我认为),因为它可能阻止系统进行更改,例如移除设备或重新安排设备。我仍然需要看看如果我为整个会话打开顶级句柄会发生什么。
我正在考虑的另一个选择是保存预先准备好的数据。 MS恳求我们通过调用HidD_FreePreparsedData()来释放它。如果我们不这样做会怎么样?
我想到的最后一件事是加速SetupDiGetClassDevs()。我目前的用法是:
HDEVINFO hardwareDeviceInfo =
SetupDiGetClassDevs (
&HidGuid,
NULL, // Define no enumerator (global)
NULL, // Define no
(DIGCF_PRESENT | // Only Devices present
DIGCF_DEVICEINTERFACE)); // Function class devices.
如果更改参数会加快吗?
答案 0 :(得分:2)
完成设备后,只需发布预先准备好的数据即可。如果设备被删除,对它的读取或写入将失败,您可以通过调用GetLastError()