SerialPortEventListener Attuazione
-
19-09-2019 - |
Domanda
sto giocando con il protocollo Firmata, che permette di controllare Arduino attraverso un protocollo seriale. Sto leggendo i valori dei sensori che utilizzano SerialPortEventListener ascolto per l'evento DATA_AVAILABLE. Ma ho notato un sacco di latenza ci vuole un secondo per i valori dei sensori aggiornati per essere registrato da mia applicazione, protocollo funziona a una velocità di trasmissione di 57600. La mia domanda è fa il listener di eventi eseguito su un thread separato o fa sia la mia applicazione e run ascoltatore nello stesso thread e la mia domanda rallentano le cose.
EDIT: Per rendere la mia auto chiaro, sto solo chiedendo, in teoria, sarebbe più veloce di leggere trasmissione seriale in un thread separato o utilizzando il listener di eventi
?Soluzione
Mi dispiace per tutte queste risposte, sto pensando intensamente sul problema.
A parte il problema di aggiornare il proprio GUI dal filo sbagliato, il problema dei fili è probabilmente abbastanza irrilevante. Dal momento che ottenere un aggiornamento dalla porta seriale probabilmente non consuma un sacco di potenza della CPU (non dovrebbe, in ogni caso, a meno che non si fa con un ciclo di polling stretto) non ci sarà alcun conflitto evidente per le risorse della CPU tra i thread, e quindi non dovrebbero esserci alcuna possibilità per fili siano "rallentare le operazioni." Avevo praticamente sconto questa possibilità. Ma si poteva guardare in TaskManager (Windows) o Monitor di sistema (Linux) per vedere se le CPU vengono tenuti molto occupato; che potrebbe cambiare le cose.
Altri suggerimenti
Senza vedere la vostra applicazione devo indovinare; ma è possibile che si sta cercando di visualizzare questi eventi in una GUI, e l'aggiornamento del GUI da un thread diverso dal thread evento spedizione?
Come sta la latenza quando semplicemente non System.out.println()
?
Un altro indovinare:? Quando si ottiene il vostro evento DATA_AVAILABLE
, si ottiene anche alcune informazioni su quanto i dati è disponibile
Si potrebbe tentare di leggere più dati di quanto sia nel buffer, e non si arriva a vedere che cosa avete ottenuto fino a quando i tempi di funzionamento LEGGERE. Ciò indicherebbe il timeout è impostato a 1 secondo.