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

Réseau C Discussion :

Liaison entre programmes


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 38
    Par défaut Liaison entre programmes
    Bonjour à tous !

    J'aurais aimé savoir comment il était possible de transférer des données d'un programme vers un autre.

    En fait, je souhaite réaliser un programme qui gére un réseau de train miniature par l'intermédiaire du port parallèle. Le PC est relié à une carte avec un PIC.
    Le problème est le suivant : les données arrivent sur le port parallèle à une cadence donnée. Je pensais donc réaliser un programme synchrone avec cette cadence qui se contente d'enregistrer les données (que le PIC lit 3 par 3 et donc que le PC recoit 3 par 3) dans un tableau. Un autre programme s'occuperait de gérer les automatismes (ex: mettre un feu au rouge si tel train est passé à tel endroit) et enfin un dernier programme serait chargé d'envoyer les données à la carte (en gérant les données prioritaires par exemple, etc.).

    Donc j'aurais voulu savoir comment faire communiquer ces trois programmes (écrits en C) entre eux...

    J'espère avoir été clair

    Merci !

    Charlock

  2. #2
    Membre éclairé Avatar de ronan99999
    Inscrit en
    Juillet 2003
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Juillet 2003
    Messages : 279
    Par défaut
    Par réseau tcp udp
    Par fichier pipe etc...
    Tu peux regarder autrement la MPI.
    http://fr.wikipedia.org/wiki/Message_Passing_Interface

    Mais peut etre faut'il que tu repenses ton programme en terme de processus légers, pourquoi trois exe différents, si ils sont sur la meme machine.

  3. #3
    Membre chevronné
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut
    Sous quel système d'exploitation travailles tu?

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Euh, là, on dirait que pratiquement toutes ces données sont partagées à un moment ou un autre.

    Là, je te conseillerais de faire une seule application, mais multithreadée.
    (Un processus, trois threads).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 38
    Par défaut
    Merci à tous !

    Mais peut etre faut'il que tu repenses ton programme en terme de processus légers, pourquoi trois exe différents, si ils sont sur la meme machine.
    Bah justement c'est peut être là le problème !! C'était la première solution qui m'était passée par la tête.

    Sous quel système d'exploitation travailles tu?
    Je sais pas encore sur quoi je vais le faire, vu qu'il faut que je me dégotte un PC de récup. Donc peut etre MS-DOS, ou Linux. Pas Windows en tout cas

    Euh, là, on dirait que pratiquement toutes ces données sont partagées à un moment ou un autre.

    Là, je te conseillerais de faire une seule application, mais multithreadée.
    (Un processus, trois threads).
    Ca sonne bien ca Je vois l'idée mais je m'y connais pas du tout dans ce domaine. Tu peux expliquer un tout petit peu plus stp ?

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Thread == processus léger.

    Donc, dès le début de ton programme (le main() est le thread principal), tu crées tes buffers partagés, puis tu lances deux threads supplémentaires (avec pthread_create() sous unixoïde, _beginthreadex() sous Windows), comme ça tu te retrouves avec trois threads, qui peuvent tous les trois manipuler les buffers.
    --> Un thread pour chacune des trois tâches.

    Pour la copie des données reçues par le premier thread, tu devras sûrement utiliser un verrou (pour empêcher le premier thread de modifier pendant que le second lit, et permettre au second de vider le buffer).
    Sous unixoïde, les verrous sont des mutex (pthread_mutex_init() ou pthread_mutex_create()), sous Windows, on utilise des CRITICAL_SECTION (InitializeCriticalSection()).
    Note: le verrou doit être créé en même temps que les buffers partagés, pour être passés aux threads.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Charlock
    Je sais pas encore sur quoi je vais le faire, vu qu'il faut que je me dégotte un PC de récup. Donc peut etre MS-DOS, ou Linux. Pas Windows en tout cas
    Windows, c'est le Diable !

Discussions similaires

  1. [VB.NET] Liaison entre les pages aspx et vb
    Par cosmos38240 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 18/03/2005, 12h55
  2. liaison entre plusieurs base de donnee
    Par GMI dans le forum Bases de données
    Réponses: 1
    Dernier message: 15/12/2004, 18h42
  3. Opérer une liaison entre 2 DBLookup
    Par pey dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/12/2004, 10h11
  4. Liaison entre un dblookupcombobox (filtre) et un dbgrid
    Par naw dans le forum Bases de données
    Réponses: 9
    Dernier message: 22/08/2004, 12h12
  5. communication entre programmes
    Par jérôme dans le forum C
    Réponses: 12
    Dernier message: 16/04/2002, 08h05

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