一个不移动时多个 HID 设备滞后 (PyUSB)
Lagging for multiple HID devices when one is not moving (PyUSB)
我正在使用两个具有相同产品和供应商 ID 的 HID 设备(Logitech Attack 3 控制器),因此它们使用总线和设备编号进行区分。
当我同时移动两个设备时,它们运行没有任何延迟,但是当我只移动其中一个时,它非常滞后。我认为这可能是由于 USBError 异常的处理有些滞后,每次其中一个设备未移动时都会触发该异常。如果取出第二个设备,代码可以正常工作。
我认为这是有问题的代码:
while True:
print "Hi"
try:
rData = rDev.read(endpointR.bEndpointAddress,endpointR.wMaxPacketSize)
print "right"
print rData
except usb.core.USBError as e:
rData = None
try:
lData = lDev.read(endpointL.bEndpointAddress,endpointL.wMaxPacketSize)
print "left"
print lData
except usb.core.USBError as e:
lData = None
提前致谢。
根据文档,读取函数采用可选的关键字参数 timeout,它以毫秒为单位指定超时。默认值为 1000。由于您没有提供此参数,因此该函数可能需要长达 1 秒的时间才能到达 return。显然,该设备除非移动,否则不会向主机(OS)发送数据,这意味着在这种情况下,读取功能将超时。所以需要设置超时关键字。另一种方法可能是将此代码移动到另一个线程,在该线程中超时对用户而言不明显。
我正在使用两个具有相同产品和供应商 ID 的 HID 设备(Logitech Attack 3 控制器),因此它们使用总线和设备编号进行区分。
当我同时移动两个设备时,它们运行没有任何延迟,但是当我只移动其中一个时,它非常滞后。我认为这可能是由于 USBError 异常的处理有些滞后,每次其中一个设备未移动时都会触发该异常。如果取出第二个设备,代码可以正常工作。
我认为这是有问题的代码:
while True:
print "Hi"
try:
rData = rDev.read(endpointR.bEndpointAddress,endpointR.wMaxPacketSize)
print "right"
print rData
except usb.core.USBError as e:
rData = None
try:
lData = lDev.read(endpointL.bEndpointAddress,endpointL.wMaxPacketSize)
print "left"
print lData
except usb.core.USBError as e:
lData = None
提前致谢。
根据文档,读取函数采用可选的关键字参数 timeout,它以毫秒为单位指定超时。默认值为 1000。由于您没有提供此参数,因此该函数可能需要长达 1 秒的时间才能到达 return。显然,该设备除非移动,否则不会向主机(OS)发送数据,这意味着在这种情况下,读取功能将超时。所以需要设置超时关键字。另一种方法可能是将此代码移动到另一个线程,在该线程中超时对用户而言不明显。