Communication entre applications

Signaler
Messages postés
46
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
2 mars 2012
-
Messages postés
46
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
2 mars 2012
-
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

est-ce déjà une bonne idée de le faire ainsi ?

Merci d'avance et bonne journée tous ...


Aniss

4 réponses

Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
32
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 ?


C# is amazing, enjoy it!
Messages postés
46
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
2 mars 2012
1
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.

Merci d'avance.
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
32
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.

As-tu essayé un modele de ce genre:

thread Stack thread
Acquisition Données Affichage
Ecriture >>>|------|
|------|
|------|>>> lecture et affichage

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.


C# is amazing, enjoy it!
Messages postés
46
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
2 mars 2012
1
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

Bonne journée