Android USB Accesorio Multi Thread

Dolor de cabeza causado por multi-threadingy Android Open Accessory.

Necesito comunicarme con un accesorio USB, pero necesito hacerlo desde 2 hilos. Un hilo genera y envía datos, el otro lee datos.

  • ¿Por qué no uso un solo hilo? Debido a que puede haber 1 o más escrituras antes de que una lectura y las lecturas se bloqueen, esa no es una opción.

  • Si uso múltiples hilos, me encuentro I/O Error (No such device)tarde o temprano, porque tendré una colisión entre la lectura y la escritura que se ejecutan al mismo tiempo.

  • El bloqueo más o menos me devolverá a la situación de un solo hilo, así que no es bueno.

  • .available()el método en las input-streamdevoluciones no es compatible, por lo que no puedo verificar si hay algo disponible antes de hacer una lectura

  • Como no es una secuencia basada en sockets, tampoco puedo configurar el tiempo de espera.

  • Intenté obtener el FileDescriptorde USBAccessoryy pasar a JNIpara manejarlo allí, pero después de la primera lectura / escritura, el dispositivo se vuelve inaccesible.

Pregunta / sugerencia necesaria:
¿Cuál será el enfoque sugerido / mejor práctica para esto? No espero un código escrito, solo necesito alguna orientación sobre cómo abordar este problema.

Para aclarar:
el software en el otro extremo podría o NO responder con ningún dato. Hay algunos llamados envíos silenciosos donde los datos enviados se acaban de recibir pero no hay ACK. Dado que la aplicación en la que estoy trabajando es solo un proxy, no tengo una imagen clara si los datos producirán o no una respuesta. Eso requerirá un análisis de los datos también, que no está en los libros en este momento.

Gracias.

Respuesta 1

Como desea leer y escribir en paralelo, la escritura siempre dará lugar a una pausa para leer si la lectura está en la misma parte que la escritura.

Es posible que pueda seguir un enfoque similar ConcurrentHashMapy usar diferentes bloqueos para diferentes segmentos y bloquear la lectura solo si la escritura está en el mismo segmento, de lo contrario, permita que se realice la lectura.

Esta voluntad

  1. Evite bloquear la lectura durante la escritura en la mayoría de los escenarios
  2. Evitar colisiones y
  3. Definitivamente no será un enfoque de un solo hilo.

Espero que ayude.

Respuesta: 2

Apenas estoy empezando a aprender mi primer lenguaje de programación a partir de ayer, así que estoy escribiendo programas de prueba simples de mi libro de Java. Lo que intento hacer es que un usuario ingrese una cuenta estática mensual ...

He tratado de mantener mi JTable apretada y segura, haciendo que solo las columnas editables sean editables a través de isCellEditable (). Sin embargo, mis clientes insisten en que desean hacer doble clic en una celda para que puedan ...

Quiero almacenar en caché algunas partes de mi página JSP porque es pesado de renderizar. No se puede almacenar en caché toda la página, ya que contiene contenido específico para el usuario, pero la mayoría sí. Pensé que la mejor solución sería ...

Tengo un mapa: Map <String, Integer> myMap = new HashMap <String, Integer> (); Ahora he agregado algunos valores: myMap.put ("east", generateId ()); myMap.put ("oeste", generateId ()); myMap.put ("...