Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1345 connectés 

  FORUM HardWare.fr
  Programmation
  API Win32

  [Résolu] Communiquer entre deux processus: chose impossible ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Communiquer entre deux processus: chose impossible ?

n°1755264
basile238
Posté le 03-07-2008 à 18:34:14  profilanswer
 

Bonjour à tous,
 
je cherche à faire quelque chose de très simple mais je n'y arrive pas et ça fait pourtant plusieurs jours que je cherche.
 
Pour résumer la chose, j'ai deux applications A et B
A tourne en permanence.
 
Je voudrais que B puisse envoyer un message à A et que A y réagisse immédiatement.
 
J'ai essayé pendant deux jours d'utiliser les NamedPipes mais apparemment ce n'est pas la bonne solution puisque je ne vois pas de moyen pour l'application A de se rendre compte qu'on vient de lui envoyer un message, sauf à vérifier l'état de son Pipe chaque milliseconde.
 
Donc voilà, je cherche un moyen pour l'application B de  dire à l'application A, "ohé réveille-toi je t'envoie un message"
 
Merci pour votre aide!


Message édité par basile238 le 24-07-2008 à 12:27:26
mood
Publicité
Posté le 03-07-2008 à 18:34:14  profilanswer
 

n°1755266
tholdan
Posté le 03-07-2008 à 18:43:14  profilanswer
 

socket ?


---------------
Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn ! [:thalis]
n°1755271
basile238
Posté le 03-07-2008 à 19:06:12  profilanswer
 


 
Ca me gêne un peu car je crois que le pare-feu risque de s'en mêler non ?
Je n'ai pas accès au pare-feu étant donné que le logiciel sera installé sur plusieurs machines auxquelles je n'ai pas accès.
 

n°1755273
Taz
bisounours-codeur
Posté le 03-07-2008 à 19:13:07  profilanswer
 

pipe, tube nommé, socket, socket unix, mémoire partagée, etc
 
y a aucun problème à surveiller un canal d'E/S pour voir si quelque chose arrive, tu n'es pas obligé de faire de l'attente active hein

n°1755275
basile238
Posté le 03-07-2008 à 19:22:48  profilanswer
 

Ca va pas faire ramer le truc si je vérifie tous les dizièmes de secondes si un truc arrive ?

n°1755276
basile238
Posté le 03-07-2008 à 19:24:06  profilanswer
 

Je trouve ça un peu dommage de vérifier plusieurs fois par seconde alors que le message va typiquement être envoyé 2 ou 3 fois par jour.
J'ai l'impression que c'est un peu du gachis toutes ces vérifications pour rien.

n°1755280
Taz
bisounours-codeur
Posté le 03-07-2008 à 19:36:04  profilanswer
 

basile238 a écrit :

Je trouve ça un peu dommage de vérifier plusieurs fois par seconde alors que le message va typiquement être envoyé 2 ou 3 fois par jour.
J'ai l'impression que c'est un peu du gachis toutes ces vérifications pour rien.


Mais personne ne fait comme ça ... par exemple tu fais un poll/select/epoll et voilà ...

n°1755509
basile238
Posté le 04-07-2008 à 11:24:39  profilanswer
 

Taz a écrit :


Mais personne ne fait comme ça ... par exemple tu fais un poll/select/epoll et voilà ...


 
Merci pour ta réponse. Je  vais essayer de me documenter sur les poll/select auquel je ne connais absolument rien pour le moment.
D'après ce que j'ai lu jusqu'à présent, sous Windows ça ne marche qu'avec les sockets. N'y a-t-il pas un moyen de faire ça avec  des fonctions  non réseaux (comme je disais plus haut, j'ai peur que le  pare-feu s'en mêle) ?

n°1755573
basile238
Posté le 04-07-2008 à 13:12:53  profilanswer
 

Bon bref, moi qui pensais que c'était simple de communiquer entre deux applications.
Les Named Pipes ça sert à rien et les sockets c'est la merde.
 
Y a pas juste moyen d'envoyer un petit bip à un processus en connaissant son pid ?

n°1755603
Taz
bisounours-codeur
Posté le 04-07-2008 à 14:08:46  profilanswer
 

je connais pas = c'est de la merde ?
 
 
les signaux.

mood
Publicité
Posté le 04-07-2008 à 14:08:46  profilanswer
 

n°1755604
kao98
...
Posté le 04-07-2008 à 14:14:55  profilanswer
 

PostMessage() :??:

Message cité 1 fois
Message édité par kao98 le 04-07-2008 à 14:15:03

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1755625
basile238
Posté le 04-07-2008 à 15:05:52  profilanswer
 

Taz a écrit :

je connais pas = c'est de la merde ?


 
J'ai pas dit "c'est de la merde" mais "c'est la merde" nuance.
"C'est la merde"parce-que je ne peux peux pas me permettre que l'utilisateur bloque mon appli juste parce-qu'il aura configuré son pare-feu d'une manière ou d'une autre.  
 
 
 

Taz a écrit :

les signaux.


 
C'est gentil de me sortir des mots-clés mais ça m'aide pas beaucoup. Les signaux, ça fait  longtemps que j'ai regardé ce qu'il pouvaient faire pour moi sur wiki, sur msdn et sur pas mal d'autres sites: apparemment pas grand chose, surtout que je suis sous windows.
Maintenant si tu as des  idées un peu plus précises à me proposer sur les signaux (fonctions à utiliser par exemple) je suis preneur.
Comment, sur Windows, envoyer un signal à une application en connaissant seulement son pid ?
Comment, sur Windows, permettre à une application d'intercepter les signaux qu'on lui envoie ?

n°1755626
basile238
Posté le 04-07-2008 à 15:09:10  profilanswer
 

kao98 a écrit :

PostMessage() :??:


 
Malheureusement, PostMessage() est fait pour communiquer entre deux fenêtres différentes. Or ma première application n'est pas une application fenêtrée. En plus, étant donné qu'il s'agit de deux applis différentes, il faudrait qu'elles puissent communiquer entre elle pour que  l'une donne son identifiant de fenêtre à l'autre, ce qui nous ramène au problème initial.

n°1755645
tpierron
Posté le 04-07-2008 à 15:53:32  profilanswer
 

Oué, c'est relativement simple d'envoyer un signal à une appli Win32. C'est juste que Microsoft utilise une API complètement différente. Quand on y regarde de plus près c'est pas si différent que ça des API Posix.
 
La base en Win32, c'est le handle. Ça représente un descripteur sur tout et n'importe quoi, fenêtre, thread, process, mutex, semaphore, pipe, socket, fichiers, ... Tu as une fonction magique pour savoir s'il y a eu du changement sur un handle : WaitForSingleObject (et la toute famille associée). Le terme "changement" dépend évidemment de ton objet. Un thread et un process, c'est lorsqu'il quitte. Un mutex c'est lorsque tu obtiens le lock, une sémaphore, c'est lorsque l'entier est >0, etc ... vois la doc de WaitForSingleObject.
 
Donc tu peux faire ça avec une sémaphore, du genre :
 
Processus en attente de signal :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. int main()
  5. {
  6. HANDLE sem = CreateSemaphore(NULL, 0, 1000, "MY_SEMAPHORE" );
  7. switch (WaitForSingleObject(sem, INFINITE)) {
  8. case WAIT_OBJECT_0:
  9.  fprintf(stderr, "J'ai recu un signal d'une autre appli...\n" );
  10.  break;
  11. case WAIT_TIMEOUT:
  12.  fprintf(stderr, "Timeout ...\n" );
  13.  break;
  14. case WAIT_ABANDONED:
  15.  fprintf(stderr, "Deja recu ...\n" );
  16.  break;
  17. }
  18. return 0;
  19. }


 
Processus qui envoie le signal :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. int main()
  5. {
  6. HANDLE sem = CreateSemaphore(NULL, 0, 1000, "MY_SEMAPHORE" );
  7. fprintf(stderr, "Le process en attente va recevoir un signal ....\n" );
  8. Sleep(1000);
  9. ReleaseSemaphore(sem, 1, NULL);
  10. return 0;
  11. }


 

n°1755680
basile238
Posté le 04-07-2008 à 19:08:21  profilanswer
 

Merci tpierron!
Je me disais bien qu'il devait y avoir une solution simple.
Ca marche du feu de Dieu!
 

n°1755718
Trap D
Posté le 04-07-2008 à 22:34:38  profilanswer
 

Tu peux aussi faire la même chose avec les Event
http://msdn.microsoft.com/en-us/li [...] S.85).aspx


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  API Win32

  [Résolu] Communiquer entre deux processus: chose impossible ?

 

Sujets relatifs
[Résolu] Editeur wysiwyg dans un formulaire html[RESOLU] Utilisation de la fonction WSAAddressToString()
[Résolu] Batch confirmation d'ajout d'une imprimante en réseaux ![RESOLU] asp .net c# textbox: modifier le contenu?
[Résolu] Vérifier qu'un service est démarré en VBSImpossible de lire le code VBA d'un fichier Excel avec Excel 2007
[Resolu] Impossible de valider la page en XHTML...[résolu]Problème Carateres japonais UTF8 et IE7 php
Connexion à la BDD impossible 
Plus de sujets relatifs à : [Résolu] Communiquer entre deux processus: chose impossible ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR