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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    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 actif 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
    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...

  3. #3
    Inactif  


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

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    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 : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    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?

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