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

?
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top