我想要创建自动更新 USB 设备列表的模块(不仅仅是大容量存储)。现在它的工作方式非常粗鲁 - 它有额外的线程,1 秒后更新设备列表。但也许您知道如何处理一些生成操作系统(例如 Windows XP 及更高版本)的插入事件或如何简化此过程的另一种方法。感谢您的时间!
这个问题看起来一半是设计,一半是实现。看来您最关心的是寻找 Java USB 服务的方法,例如jUSB为系统中的热插拔事件提供服务,允许您通过以下方式调用事件控制反转而不是运行一个在后台热情地、迭代地轮询系统的线程。
您寻求的支持早在 2005 年就以 JSR-80 的形式实施,并似乎继续存在,在所有超越其商业支持的伟大项目中,javax-usb在 SourceForge 上。请注意,在他们的玩具示例中(在javax-usb-example/src/ShowTopology.java), 他们的首选模型仍然基于轮询。
然而,并非一切都失去了!在的属性文件javax.usb,我们发现:
# 是否应该使用轮询而不是等待热插拔
通知。
# 某些内核版本存在错误,并且在更新设备节点之前不要更新
唤醒等待设备文件的线程后很多秒。
如果您在中度到重度负载的系统上没有收到热插拔事件,
使用轮询。
# 请注意,由于新的(有缺陷?)内核行为破坏了 javax.usb,因此这是默认值
真实!
# 如果你知道你的内核没有损坏,你可以将其设置为 false。
#com.ibm.jusb.os.linux.LinuxUsbServices.topologyUpdateUsePolling = true
And in javax-usb/src/javax/usb/event/UsbServicesListener.java中,我们看到了一个用于设置 USB 事件侦听器的模型,您可以在设备连接到系统或从系统分离时继续使用该模型。外部没有给出任何文件说明这是否works,然而,这些文档本身似乎大多已经有 8 岁了。
因此,可以合理地假设,虽然支持理论上存在,但它滞后、陈旧,并且迫切需要社区进行更新。这是 SO 上这个优秀社区可以帮助解决的问题,所以我将开始接近直接指向项目本身。
目前,在增强的硬件或热插拔支持出现之前,轮询仍然是最佳解决方案。
(附加参考实现javax-usb)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)