IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Threads & Processus C++ Discussion :

Comment faire communiquer 2 executables? Cas un peu particulier!


Sujet :

Threads & Processus C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 50
    Points : 29
    Points
    29
    Par défaut Comment faire communiquer 2 executables? Cas un peu particulier!
    Bonjour a tous!


    Je suis confronter a une chose que je ne connais pas du tout, et je me perds dans mes recherches! Je vous explique ce que je cherche a faire.

    Avant tout, je précise (au cas ou) que je travail sur du ubuntu.


    D'un cote, j'ai un "brain" en C++ qui fait des traitements de trames issu de matos domotiques, et qui stock des infos dans une bdd SQLite. Jusque la, pas de soucis.

    De l'autre cote, j'ai une IHM (un site en local avec lighttpd) qui utilise des CGI C++ pour accéder a la bdd SQLite du brain. Encore la pas de soucis.

    Le problème vient quand j'essaye de passer directement des informations issu du CGI vers le brain, comme une commande a lui faire exécuter. Il faut que ca ce fasse le plus rapidement possible (sinon utilisateur pas content).


    Le brain fonctionne sur le mod while (1), alors que le CGI est lance uniquement quand l'utilisateur décide de lancer une commande a travers le site. Cette commande prend la forme d'une chaine de caractère a faire passer entre les deux.


    Comment est ce que je peux faire pour faire communiquer le brain et le CGI?


    En faisant des recherches, j'ai trouver des choses a propos des pipes, des sémaphores, ou encore de la mémoire partagée, mais je ne suis pas sur que ca marche dans mon cas.

    Et une fois le choix fait, comment faire techniquement? Creer un thread/processus dans mon brain qui serait dédié uniquement a la reconnaissance de messages envoyés par le CGI?



    Need un bon gros coup de main sur le coup!

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut
    Bonjour Baradhur et bienvenue sur le forum

    Regarde du côté de D-Bus (wiki ou doc Qt)

    Par contre, je ne peux pas t'aider plus, je n'ai jamais utilisé.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 50
    Points : 29
    Points
    29
    Par défaut
    Merci, je connaissais pas du tout, je vais aller regarder.

    Une petite precisions, c'est du travail sur de l'embarquer avec une memoire et un espace limite. Je ne peux donc pas installer ce que veux, ou utiliser des librairies trop lourdes.

  4. #4
    Membre éclairé Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Points : 791
    Points
    791
    Par défaut
    Si tu as accès au brain, je pense qu'une file de message permettrait non seulement d'envoyer des messages correctement de tes cgi vers brain, mais même aussi de dégager cette attente active...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 50
    Points : 29
    Points
    29
    Par défaut
    Merci pour ta reponse! Pourrais tu me donner plus de details sur la facon dont fonctionne une file de message, et pourquoi cela ferais disparaitre l'attente active? Il faut bien attendre de recevoir les messages, non?

  6. #6
    Membre éclairé Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Points : 791
    Points
    791
    Par défaut
    Les files de message sont des objets système. L'idée est simple: on a une boite à lettre (un fichier) dans laquelle des processus vont déposer des messages. Quand un processus voit un message qui l'intéresse, il va pouvoir lire le message (et accessoirement le supprimer de la boite).

    Un lien trouvé vite fait qui a l'air pas mal
    http://www.dil.univ-mrs.fr/~massat/ens/docs/IPC.html

    L'interêt, c'est que tu vas pouvoir supprimer l'attente active: l'appel à msgrcv est bloquant (ou pas, c'est toi qui configure). Dans mes souvenirs (ça veut dire, à vérifier), en sous main il y a des sémaphores qui vont attendre qu'un message arrive (sinon, libre à toi de le faire avec des semaphiore ou des signaux).

    Du coup, ton while(1) dégage tu gagnes du temps CPU pour faire autre chose...

    (attention, je ne sais pas comment ça fonctionne sur windows, même si des objets similaires existent probablement, mais en tout cas ça fonctionne sur GNU/Linux et Solaris).

    Une chose importante... Les objets IPC (les boites à lettre en font partie) ne sont pas supprimés du système (étant donné que n'importe quel processus peut envoyer un message à la boite, pourvu qu'il ai son nom, le système ne prend pas le risque de la supprimer). C'est donc à toi de le faire.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 50
    Points : 29
    Points
    29
    Par défaut
    merci beaucoup! Ce systeme de message a l'air tout a fait adapter. Avec un fichier qui pop, ca permet en plus de verifier que les choses se passent pour debugger.

    Par contre, pour ce qui est de l'attente active, je suis pas sur. Mon brain fonctionne avec une sorte de maitre d'orchestre (qui tourne en while 1) et qui lance des "services" (processus ou thread, ca reste a definir) en fonction des trames qu'il reçoit. Il faudrait donc que je cree un service specifique pour cette communication. Et si msgrcv est bloquant, pourquoi devrais-je utiliser autre chose?

    J'ai vu pas mal de chose sur les semaphores, mais ca reste tres flou, c'est jamais bien clair. Tu pourrais m'en dire plus a leurs sujet?


    Merci de tes reponses en tout cas, tu m'aide beaucoup

  8. #8
    Membre éclairé Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Points : 791
    Points
    791
    Par défaut
    En ce qui concerne l'attente active, le but c'est de ne plus avoir ces while(1) mais bon c'est pas toujours evident...

    Les semaphore, sur le principe c'est tres simple: un processus allume une ampoule et un autre le voit et declenche une procedure particuliere, c'est tout simple..

    note: clavier qwerty donc pas d'accent dsl

  9. #9
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 50
    Points : 29
    Points
    29
    Par défaut
    Merci beaucoup pour tes reponses, je vais regarder ca plus en details!

    Par contre, est ce qu'il y a des choses en C++ faite pour ca, ou il faut faire du C+ pour l'utiliser?

  10. #10
    Membre éclairé Avatar de seeme
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    430
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 430
    Points : 791
    Points
    791
    Par défaut
    En tant que tel, je pense que ça reste du C+ comme tu dis. Il existe sans doute des wrapper pour c++ (peut-être du côté de boost, à voir...)

Discussions similaires

  1. comment fair mon fichier executable!
    Par moon5 dans le forum JDeveloper
    Réponses: 1
    Dernier message: 05/09/2007, 18h51
  2. Réponses: 1
    Dernier message: 20/10/2006, 18h46
  3. Réponses: 3
    Dernier message: 27/07/2006, 09h17
  4. Comment faire communiquer CVI et une DLL?
    Par samanderson dans le forum C
    Réponses: 25
    Dernier message: 12/07/2006, 13h53
  5. comment faire communiquer deux form MDI?
    Par eponette dans le forum Langage
    Réponses: 3
    Dernier message: 17/08/2005, 12h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo