Domanda

Devo rappresentare graficamente i dati di streaming (9600 baud), che arrivano in pacchetti da 2-4 byte da una porta seriale. I pacchetti devono essere elaborati prima della rappresentazione grafica. Attualmente, sto organizzando un evento su ciascun pacchetto completo, che sta causando problemi di reattività nel modulo grafico.

Qual è la migliore soluzione a questo problema:

  • Buffer e aumenta i dati bufferizzati in caso di eventi a intervalli di tempo (ad es. 500 millisecondi)
  • Crea buffer e lascia istanze polling oggetto per dati bufferizzati / buffer vuoto quando polling
  • Altro (?)
È stato utile?

Soluzione

Sicuramente limiterei la velocità di aggiornamento. Per tali applicazioni, di solito è sufficiente uno ogni 300 ms.

In base a ciò, una buona implementazione sarebbe un thread di lavoro che legge la porta seriale e la aggiunge a un buffer. Il thread dell'interfaccia utente può utilizzare un timer per eseguire query sui dati e aggiornare il display.

Utilizzando thread separati, il thread di lavoro può essere eseguito con priorità più alta, in modo che i picchi di carico possano ritardare gli aggiornamenti di visualizzazione, ma nessun dato viene perso.

Un altro trucco è non usare un timer fisso, ma riavviare il timer dopo aver completato l'aggiornamento. Pertanto, se l'aggiornamento richiede tempo significativo, ad es. a causa dell'elevato carico del sistema, gli aggiornamenti rallentano, riducendo efficacemente il carico.

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