我使用具有相同产品和供应商id的两个HID设备(罗技攻击3控制器),因此它们使用其总线和设备编号进行区分。
当我同时移动两个设备时,它们没有任何延迟,但当我只移动其中一个时,它是非常延迟的。我认为这可能是由于USBError异常处理的一些滞后,每次设备不移动时都会触发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
根据文档,read函数有一个可选的关键字参数timeout,它以毫秒为单位指定超时时间。默认值是1000。由于没有提供此参数,该函数可能需要1秒才能返回。显然,除非设备移动,否则它不会向主机(操作系统)发送数据,这意味着在这种情况下,读取函数将超时。因此需要设置timeout关键字。另一种方法可能是将此代码移到另一个线程中,这样用户就不会明显地看到超时。