cs_tonitto
Messages postés46Date d'inscriptionmercredi 8 décembre 2004StatutMembreDernière intervention 2 mars 2012
-
21 sept. 2009 à 09:58
cs_tonitto
Messages postés46Date d'inscriptionmercredi 8 décembre 2004StatutMembreDernière intervention 2 mars 2012
-
28 sept. 2009 à 09:18
Bonjour a tous,
Je bosse sur une machine où je dois récupérer un signal et l'afficher sous forme de graphique. j'ai essayé de le faire sur une même application seulement je loupe pas mal de points ..
donc j'ai voulu faire une application console pour récupérer le signal et une autre WinForm pour le dessiner. seulement j'ai pas d'idée pour faire passer les infos de l'application console au winForm.
vous n'aurez pas une idée ?
j'ai pensé à un client/serveur mais je cherche autre chose ?
coté serialisation/mémoire partagée qqc comme ca
cs_Robert33
Messages postés834Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention14 janvier 201733 26 sept. 2009 à 09:00
Bonjour
Pour communiquer entre 2 appli, le plus simple est d'utiliser les Sockets, tu trouveras plein d'exemple sur le net, ou dans l'aide du visual studio.
Mais il n'y a pas de raison que ça ne marche pas dans une seule application.
Ton application est-elle multi-threads? avec une pile de données stockant les evenements ?
cs_tonitto
Messages postés46Date d'inscriptionmercredi 8 décembre 2004StatutMembreDernière intervention 2 mars 20121 26 sept. 2009 à 20:01
Bonsoir,
tout d'abord, merci d'avoir répondu a mon message.
En fait c presque du temps réel que je dois faire :s, en C# ...
En fait je dois récupérer un signal électrique (provenant d'un moteur en rotation) et dois dessiner une sinusoïde.
Donc je récupère la position du moteur (le fameux signal) et je dois l'afficher sur une courbe (zedGraph) seulement au moment de l'affichage
je remarque que comme si il manque des points (l'acquisition ne se fait plus correctement). j'ai donc utilisé un profiler et j'ai vu que le zedGraph prend beaucoup de temps pour se rafraichir (avec un Timer) ce qui ralenti la machine et donc l'acquisition du signal électrique.
j'ai essayé de faire deux programme séparés et les faire communiquer. j'ai essayer en TCP/IP mais c'été limite pire ! et la j'ai essayé en envoyant des messages au processus. à chaque cycle j'envoie les données récupérées
en gros ce que je voudrais c'est une solution pour que l'affichage ne ralentisse pas l'acquisition des données.
En fait ça marche dans une même application c'est juste que l'affichage ralenti l'acquisition des données...
PS : j'utilise deux Thread, un pour l'affichage et un autre pour l'acquisition.
cs_Robert33
Messages postés834Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention14 janvier 201733 27 sept. 2009 à 08:40
Bonjour
Hummm, C# n'est être pse la solution.
bien que le framework soit relativement bien optimiser; c'est tout de même plus lent que du code natif. Pour faire un moniteur temps réel il va donc falloir une machine qui soit performante.
Je pense qu'avoir tout dans la même appli donnera de meilleurs performances, la communication via socket IP prend du temps et des ressources.
L'interret est d'avoir un thread qui écrit dans une pile (stack) partagée
le thread d'affichage vient pomper la pile régulierement.
Là tu es certain de ne rien louper, mais il n'est pas sur que ton affichage soit en phase. le décalage sera d'autant plus important que ta machine sera lente.
Je crois que l'objet Stack est Thread-Safe, si ce n'est pas le cas pose un sémaphore pour éviter les confits.
en tout cas, évite les evenments synchrones entre les 2 threads qui vont ralentir l'ensemble.
cs_tonitto
Messages postés46Date d'inscriptionmercredi 8 décembre 2004StatutMembreDernière intervention 2 mars 20121 28 sept. 2009 à 09:18
bonjour,
En fait pour le C# je n'ai pas le choix, je travailles sur une partie d'un gros projet.
pour ce que ta montré c'est ce que je fait, seulement l'objet Stack je connaissais pas, c'est plus léger qu'une liste générique ordinaire ?
le problème aussi c'est que je dois garder l'ensemble des données sur le graphique, je dois rien effacer. c'est pour ca que l'application est ralentie :s