慢速访问HID顶级集合

时间:2015-06-01 09:07:44

标签: c++ windows collections driver hid

简要说明:

  • 我的HID设备拥有许多顶级系列。
  • 应用程序不断查询收集详细信息。
  • 瓶颈是 - SetupDiGetClassDevs()似乎很慢。

详细说明:

我的代码基本上遵循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.

如果更改参数会加快吗?

1 个答案:

答案 0 :(得分:2)

完成设备后,只需发布​​预先准备好的数据即可。如果设备被删除,对它的读取或写入将失败,您可以通过调用GetLastError()

查看错误代码来检测