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

C++ Discussion :

Echange de données(structures) entre 2 programmes C++ d'une même solution


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 32
    Points
    32
    Par défaut Echange de données(structures) entre 2 programmes C++ d'une même solution
    Bonjour,

    J'ai développé il y a quelques temps une "grosse" application en C++ en utilisant les threads (chaque thread étant dédié à une fonction propre)
    Par exemple: thread 1 reçoit des messages de l'extérieur (base de données ou autre programme)
    thread 2 fait le traitement des messages
    Tout fonctionne correctement(sans être parfait)

    Je souhaite désormais dissocier mes 2 threads en 2 applis bien distinctes, ce qui me permettra par exemple d'arrêter le thread de traitement (2) tout en laissant le thread 1 recevoir les messages et les stocker pour un traitement ultérieur.

    Alors je ne sais pas quel est le meilleur moyen pour faire cela, j'ai penser à utiliser une base de données intermédiaire mais je pense que ce sera trop lourd
    les données échangées sont une structure d'entier et de float ....
    est il possible de définir une zone mémoire utile à mes 2 programmes? ou autre?
    quel est le meilleur moyen, le plus léger (à programmer et au niveau de l'execution) pour faire cela?

    merci d'avance pour vos réponses

  2. #2
    Membre régulier Avatar de Jerome S
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 62
    Points : 89
    Points
    89
    Par défaut
    Pour faire communiquer deux applications entre elles, et chacune soit indépendante (pas besoin de l'autre pour fonctionner), tu n'a pas beaucoup de possibilités : base de données, ou fichier (texte).
    A ma connaissance, il n'y a pas tellement d'autres possibilités...
    Dans le monde, il y a 10 types de personnes. Ceux qui comprennent ce message et les autres

  3. #3
    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 620
    Points
    15 620
    Par défaut
    Heureusement que si, il existe (beaucoup) de méthodes pour faire communiquer 2 applications entre elles (en fonction des contraintes : mémoire partagée ou distribuée, ordinateurs distants ou local, etc.)
    Une petite recherche sur google avec "Inter-process communication". En vrac : boost.interprocess, boost.mpi, réseau (un de mes préférés, c'est facile de passer de local à distant), POSIX, D-BUS (linux only je crois), COM/DCOM/OLE/ (windows only ), etc. etc.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 32
    Points
    32
    Par défaut
    salut, merci pour vos réponses, dans mon cas ce sera toujours sur un seul pc local sous Windows.
    Je cherche le meilleur moyen sachant que cette "communication" se fera toujours de la même manière avec le même flux de données (une structure envoyée et une structure reçue)
    j'étais en train de lire des articles sur la mémoire partagée.

    (dans mon ancien programme basé sur MFC les threads communiquaient entre eux via les PostThreadMessage)

    quand tu dis réseau est ton préféré t'entends quoi par réseau?

  5. #5
    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 620
    Points
    15 620
    Par défaut
    Un client et un serveur en local (ou en peer-to-peer ou en broadcast) : tu ajoutes des fonctionnalités de communication réseau (UDP et/ou TCP) et tu communiques en localhsost (IP = 127.0.0.1). Ca prend quelques lignes avec un bibliothèques adéquate (regarde par exemple la doc de Qt : serveur et client)

    Pour la mémoire partagée, attention : 2 threads utiliseront une mémoire partagée (donc pas de problème) par contre, 2 processus auront des mémoires séparée et une tentative d'accès par l'un sur la mémoire de l'autre provoquera un memory acces violation (je crois)

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 32
    Points
    32
    Par défaut
    Ok super pour la mémoire partagée... j'étais en train de me dire qu'effectivement ça semblait être au sein d'une seule application.
    Pour tout ce qui est des communications réseaux TCP/IP etc ... je connais parfaitement
    je n'y avais pas pensé en premier car pour moi ça me semblait un poil lourd, et je voulais m'assurer qu'il n'y ait pas une solution plus simple et plus rapide.

    Seul hic par rapport à cela : un des cas qui me pousse à vouloir scinder en deux mon programme est : en mode production(arrivée constante de messages) j'aimerais pouvoir débogguer la partie "traitement de message" avec des points d'arret et tout ce ci sans provoquer la perte de message du thread "COM" ...
    Donc si je débogue et que je prends mon temps, je perdrai ma communication interne (entre mes 2 processus) non?

  7. #7
    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 620
    Points
    15 620
    Par défaut
    Euh... je maîtrise pas assez les débogueurs en multithread, mais pour moi, si tu débogues, tu stoppes tous les threads de l'application et donc tu ne peux plus recevoir de message du tout (quelque soit la méthode choisie : IPC, MPI, réseau, etc.)
    Une solution (plus safe) est que le serveur ne supprime un message que lorsqu'il a reçu un accusé de réception du client. Sinon les messages peuvent être stockés et envoyés dès que la connexion est rétablie (circular buffer pour éviter la saturation ?)

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 32
    Points
    32
    Par défaut
    en fait le message envoyé correspond à une "map" donc il n'est pas grave de ne pas pouvoir envoyé des messages pendant un certain laps de temps
    le second processus lorsqu'il sera "relancé" récupérera la map tel qu'elle est à ce moment là!

    ça devrait le faire!

    effectivement le débug multithread j'ai du mal et je pense comme toi que l'on stoppe tous les threads...

    merci encore

  9. #9
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    En ce qui concerne la mémoire partagée, je crois que c'est possible entre deux processus distincts, mais ça dépend de l'OS...

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/05/2013, 20h17
  2. [AC-2003] Annuler une entrée dans un sous-formulaire - Une autre solution?
    Par Dermochelys dans le forum VBA Access
    Réponses: 3
    Dernier message: 03/12/2009, 09h33
  3. Communication entre 2 projets dans une même solution
    Par Alex972 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 30/03/2009, 04h35
  4. Référence entre plusieurs projets d'une même solution
    Par robertlafrite dans le forum Windows Forms
    Réponses: 9
    Dernier message: 04/07/2008, 09h56
  5. Réponses: 5
    Dernier message: 24/04/2008, 21h04

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