Question

Je dois représenter graphiquement les données en continu (9600 bauds), qui arrivent en paquets de 2 à 4 octets à partir d’un port série. Les paquets doivent être traités avant de représenter graphiquement. Actuellement, je déclenche un événement sur chaque paquet complet, ce qui provoque des problèmes de réactivité sur le formulaire graphique.

Quelle est la meilleure solution à ce problème:

  • Mettre en mémoire tampon les données et augmenter les données en mémoire tampon dans les événements à intervalles programmés (500 millisecondes)
  • Construire un tampon et laisser l'instanciation interroger un objet pour les données en tampon / tampon vide lors de l'interrogation
  • Autre (?)
Était-ce utile?

La solution

Je voudrais certainement limiter le taux de mise à jour. Pour de telles applications, un seul 300 ms suffit généralement.

Sur cette base, une bonne implémentation serait un thread de travail qui lit le port série et l’ajoute à un tampon. Le thread d'interface utilisateur peut utiliser un minuteur pour interroger les données et mettre à jour l'affichage.

À l'aide de threads distincts, le thread de travail peut s'exécuter avec une priorité plus élevée, de sorte que les pics de charge risquent de retarder l'affichage, mais aucune donnée n'est perdue.

Une astuce supplémentaire consiste à ne pas utiliser un minuteur fixe, mais à le redémarrer une fois la mise à jour terminée. Ainsi, si la mise à jour prend beaucoup de temps, par exemple, En raison de la charge système élevée, vos mises à jour ralentissent, ce qui réduit efficacement la charge.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top