sebome
Messages postés15Date d'inscriptionmardi 10 mai 2005StatutMembreDernière intervention 5 septembre 2008
-
4 sept. 2008 à 17:53
sebome
Messages postés15Date d'inscriptionmardi 10 mai 2005StatutMembreDernière intervention 5 septembre 2008
-
5 sept. 2008 à 13:43
Bonjour à tous,
J'ai une petite question concernant l'architecture d'un logiciel.
Dans mon logiciel, je lis des trames sur le port RS232 et j'affiche les données sur une IHM (sous forme de LED pour des etats binaires, ou dans un tableau et possible aussi d'afficher des courbes).
La lecture sur le port série se fait dans un thread lancer par la partie IHM.
Mon problème et que lorsque je reçois des trames trop regulierement (toutes les 10 ms environ), l'affichage des données sur l'IHM fait ramer le logiciel.
Je cherche une idée pour séparer la partie lecture et decodage des trames rs232 de la partie IHM.
Auriez vous une idée à me proposer (je suis developpeur amateur)?
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 4 sept. 2008 à 18:13
Plusieurs choses :
1 - Pas besoin de lancer un thread. Juste besoin de t'abonner a SeriaPort.DataReceived (si ca correspond a ton besoin). Cette méthode s'execute dans le threadpool sans que tu aies besoin d'intervenir a ce niveau.
2 - toutes les 10ms, si tu rame, cest pas une question de threading ou d'IHM, cest juste que ton traitement est trop long/lent (surtout si tu es déjà dans un thread à part)
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 5 sept. 2008 à 00:08
déjà tu devrais commencer par voir si tu peux pas mieux faire tes traitements IHM (utilises-tu des fonctions longues? as tu codé override des méthodes OnPaint dans tes controles d'affichages et si oui ne peux tu pas optimiser?).
Sinon si cest vraiment un problème entre tes deux threads, tu peux utiliser TaForm.BeginInvoke(TaMethodDeMiseAJourDesDonnees) pour que tes deux thread ne s'attendent pas mutuellement
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 5 sept. 2008 à 13:05
et tu ne peux pas rafraichir le graphe sur un timer? genre toutes les 200ms? tu met les data de tes trames dans un buffer, et au bout de 200ms tu les envoies au graphe, ce qui te permettrait de ne pas ramer (et la différence visuelle serait totalement imperceptible)
Je pensai essayer d'avoir la partie IHM asynchrone à la
partie RS232.
Mon problème est que c’est la partie
rafraichissement de l'IHM qui prend du temps.
Il faudrait que je trouve un moyen d’appeler une fonction (pour
modifier des champs de l’IHM) et de ne pas attendre la fin de celle-ci pour
continuer la suite.
Je vous remercie pour votre aide.
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
Sébome
Vous n’avez pas trouvé la réponse que vous recherchez ?
sebome
Messages postés15Date d'inscriptionmardi 10 mai 2005StatutMembreDernière intervention 5 septembre 2008 5 sept. 2008 à 12:06
J'ai améliorer les traitement IHM et aussi le decodage des trames.
La seul choses que je ne sais pas améliorer c'est les courbes. J'utilise le composant zedgraph pour tracer mais courbes. Je voudrai voir l'evolution des courbes en temps réel. Le problème est qu'a chaque ajout d'un point dans la courbe, j'ai l'impressions qu'il retrace la courbe entierement . J'utilise peut être mal le composant ou ce n'est pas un composant pour tracer des courbes en temps réel.