![](/img/trans.png)
[英]USB communication between Android (accessory mode) and Windows PC (host)
[英]Android USB Accessory Multi Thread
由multi-threading
和Android Open Accessory
引起的头痛。
我需要与USB附件进行通信,但我需要从2个线程进行。 一个线程生成并发送数据,另一个线程读取数据。
为什么我不使用单个线程? 因为在读取和读取之前可以有1个或更多写入阻塞,所以这不是一个选项。
如果使用多个线程,我迟早会遇到I/O Error (No such device)
,因为我将同时执行读写之间的冲突。
锁定会或多或少地让我回到单线程的情况,所以不好。
不支持input-stream
返回的.available()
方法,因此在执行读操作之前无法检查是否有任何可用内容
由于它不是基于套接字的流,我也无法设置超时。
我尝试从USBAccessory
获取FileDescriptor
并传递给JNI
来处理它,但在第一次读/写后,设备变得无法访问。
问题/建议:
对此有何建议/最佳实践方法? 我不希望编写代码,我只需要一些如何解决这个问题的指导。
澄清:
另一端的软件可能会或可能不会响应任何数据。 有一些所谓的静默发送是刚刚收到的数据,但是没有ACK。 由于我正在处理的应用程序只是一个代理,如果数据将会或不会产生答案,我没有清晰的图片。 这也需要对数据进行分析,目前这些数据尚未出现。
谢谢。
如果您想并行读写,如果读取与写入相同,则写入将始终导致暂停读取。
也许你可以遵循与ConcurrentHashMap
类似的方法,并为不同的段使用不同的锁,并且如果write在同一段上则锁定只读,否则允许读取发生。
这将
希望有所帮助。
如果使用多个线程,我迟早会遇到I / O错误(没有这样的设备),因为我将同时执行读写之间的冲突。
这说明了一切。 由于您在不支持并发访问的同一通道上进行读写,因此您需要让您的线程等待,直到另一个线程完成读/写操作。
你的双线程方法就是我要做的,或多或少。 祝你好运,对自己有信心。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.