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 :

Transfert de structure entre 2 applications


Sujet :

Threads & Processus C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Points : 10
    Points
    10
    Par défaut Transfert de structure entre 2 applications
    Bonjour,

    Je dois transfert une structure de données (float et doubles) d'une application à une autre sur un même pc sous windows. Il m'a semblé intéressant d'utiliser les process IPC cependant je ne sais pas trop lequel choisir. J'hésite notamment entre passer mes données par de la mémoire partagée avec du filemapping ou alors utiliser un pipe.

    J'aurais aimé avoir quelques informations concernant ces processus et éventuellement quelques exemples de codes (notamment pour les pipes ).

    Merci d'avance

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    J'aurais tendance à dire que tout dépend de la taille de la structure, et de combien de fois par seconde tu dois la transférer...

    La mémoire partagée est, à mon avis, plus simple à implémenter que le pipe (qui se comporte à peu près comme un fichier / socket, donc avec un peu de gestion pour vérifier s'il y a des données ou pas).

    La mémoire partagée, elle, est vue comme un tableau, qu'il faudra protéger via un mutex nommé et une section critique située dans la mémoire partagée elle-même. Ce n'est pas bien difficile, seule la décision de passage de l'information est gênante (l'idéal étant d'avoir un thread par processus dédié à ça).

    Pour ma part, je préfère la mémoire partagée parce qu'elle n'est pas tributaire d'une taille ou d'une communication particulière : tu peux parfaitement avoir une application "maître", qui crée cette mémoire et lance les signaux indiquant qu'une donnée est prête, tandis que derrière de multiples applications "esclaves" peuvent alors récupérer les données.

    Les pipes, eux, sont d'une application à l'autre, ce qui est plus restrictif... Toutefois, pour de gros volumes de données et/ou des données fréquentes et/ou un flux constant, ils sont bien plus efficaces que la mémoire partagée.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Ma structure n'est pas énorme (20 valeurs de type float au maximum), par contre je recherche une grosse vitesse d'accès afin d'avoir une base de donnée actualisée très souvent.

    Je débute dans les processus IPC, j'ai déjà pas mal regardé la mémoire partagée et les mutex et la j'ai quelques soucis de synchronisation d'accès. Qu’entends-tu par avoir un thread par processus dédié à la décision de passage de l'information? Que doivent-ils faire?

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Si ce que tu dois gérer doit être vu comme une base de données (partagée), je partirai vers une mémoire partagée protégée par un sémaphore.

    Le gestionnaire principal des données (l'écrivain) créé la mémoire partagée et le sémaphore. Quand il veut écrire dedans, il prend le sémaphore et le libère quand il a finit d'écrire.

    Les lecteurs quand ils veulent lire prennent le sémaphore, lisent la mémoire partagée et libèrent le sémaphore.

    Après les moyens pour implémenter cela dépendent de ton architecture.

    Sous Windows, je partirai vers CreateFileMapping() et ses petites soeurs pour le segment de mémoire partagée (regarde ici pour une introduction) et vers CreateSemaphore() pour le sémaphore.

    Sinon, tu peux aussi voir du côté de boost s'il y a des équivalents ou alors du côté des appel SYSV (shmget et semget)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par OttisToole Voir le message
    Ma structure n'est pas énorme (20 valeurs de type float au maximum), par contre je recherche une grosse vitesse d'accès afin d'avoir une base de donnée actualisée très souvent.
    Mémoire partagée alors.

    Citation Envoyé par OttisToole Voir le message
    Qu’entends-tu par avoir un thread par processus dédié à la décision de passage de l'information? Que doivent-ils faire?
    Les threads "consommateurs" (appelés aussi "lecteurs") sont en attente bloquante d'un mutex / sémaphore : un mutex si un seul doit pouvoir lire en même temps, et sémaphore s'ils peuvent être plusieurs à lire simultanément.

    Quand le "producteur" (aussi appelé "rédacteur") veut mettre les données à jour, il prends le contrôle de la mémoire partagée de façon exclusive (mutex le plus souvent), mets la donnée à jour, libère les threads consommateurs puis relâche la table.

    Cela se règle habituellement avec un mutex de table, plus un mutex/sémaphore d'accès aux données. Le mutex de la table protège "physiquement" en fait l'accès au sous-mutex, qui lui protège "logiquement" les données.
    Le premier empêche donc les bêtises (blocage réel d'un accès concurrent non autorisé), le second définit qui a le droit d'accès.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Merci des indications, je vais tenter d'implémenter tout ca

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    J'arrive un peu après la bataille, mais bon... Globalement, je partage les indications données pour la mémoire partagée, mais j'amène quelques remarques :
    1/ Attention à ce que le mécanisme de synchronisation pour l'accès ne soit pas pénalisant par rapport à un autre canal d'échange. Fais quelque chose de générique qui te permette de rapidement changer d'un mode d'échange à un autre pour faire ensuite un bench sur les performances ;
    2/ Et j'en viens au second point. Tu construits un système en 2 applications distinctes sur le même poste. D'expérience, le client a souvent (mais pas toujours) dans un deuxième temps le souhait de déporter une des 2 applications sur un poste différent. Et là, la mémoire partagée Évalue ce risque par rapport à ton système.

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    C'est bon j'ai réussi a faire quelque chose de fonctionnel , merci encore à toi Mac LAK pour tes indications.

  9. #9
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Oups, j'avais zappé ton message du 27/07, désolé...

    Citation Envoyé par OttisToole Voir le message
    merci encore à toi Mac LAK pour tes indications.
    De rien. Un p'tit alors ?
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Solution de transfert de fichier entre 2 applications sur 2 serveurs différents
    Par garthos dans le forum Développement Web en Java
    Réponses: 5
    Dernier message: 15/04/2013, 13h56
  2. Transfert de donnée entre WP7 et application PC
    Par jerem3000 dans le forum Windows Phone
    Réponses: 19
    Dernier message: 07/03/2011, 18h40
  3. Envoi de message entre 2 applications
    Par floweez dans le forum Windows
    Réponses: 9
    Dernier message: 30/06/2004, 16h34
  4. couche entre partie applicative et donnée
    Par crossbow dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 14/06/2004, 15h54
  5. [Designer] Problème de transfert de données entre modul
    Par BILLYPATOU dans le forum Designer
    Réponses: 11
    Dernier message: 09/03/2004, 18h15

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