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++Builder Discussion :

Lecture standard et communication entre processus!


Sujet :

C++Builder

  1. #1
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    15
    D�tails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 15
    Par d�faut Lecture standard et communication entre processus!
    Bonjour a tous,

    Je voudrais savoir si c'est possible de cr�e 2 applications: une qui lit uun flux de donn�es sur l'entree standard et une autre qui r�cupere ce qui a �t� �crits dans la premiere appli et qui le traite???

    J'imagine qu'il faut utiliser le multithread mais je ne sais pas comment l'utiliser pouvez vous me donner un coup de main!!!

  2. #2
    Membre �prouv�
    Profil pro
    Architecte logiciel
    Inscrit en
    Octobre 2002
    Messages
    64
    D�tails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activit� : Architecte logiciel

    Informations forums :
    Inscription : Octobre 2002
    Messages : 64
    Par d�faut
    salut,
    pour la communication entre les 2 applications , tu peux utiliser les sockets tu as des objets qui le font tres bien dans la palette internet de
    l'EDI de BCB.
    A+.

  3. #3
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    15
    D�tails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 15
    Par d�faut Communication entre processus
    J'ai d�ja fait ce genre de programme mais dans le cadre du syteme Unix avec utilisation de pipe() et de fork() et des signaux systeme mais je ne sais pas si les sockets sont une bonne solution.

    En fait il faudrais que un programme lise sur l'entree standard et des qu'il ya un flux �cris dans le canal de communication des 2 processus et provoque un signal pour indiquer au processus de lire ce flux sur le canal de communication.

    Ya t'il un autre moyen que d'utiliser les sockets?? car les sockets sont plus utilis� sur le reseaux qu entre processus!

    Merci pour vos reponses.

    Tartar

  4. #4
    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
    Tu peux faire la m�me chose sous Windows que sous Unix:
    fork() ---> CreateProcess()
    pipe() ---> CreatePipe()
    Apres le fonctionnement est le m�me

  5. #5
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    15
    D�tails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 15
    Par d�faut
    pas mal �a.

    Je vais essayer de faire des recherches dans l'aide mais un pti exemple d'utilisation me ferais plaisir.

    a+ et mer�i

  6. #6
    Invit� de passage
    Inscrit en
    Juillet 2003
    Messages
    1
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 1
    Par d�faut
    Tu peux aussi utiliser les fonctions de memoire partag�.

    Tu crees d'abord ta structure de donn�es que tu veux mettre dans la memoire partag�e :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    typedef struct
    {
            int truc;
            char machin[255];
    }SData;
    Une petite fonction pour creer ou ouvrir :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    HANDLE ObtainMappingHandle(char *Name)
    {
            HANDLE hdl = CreateFileMapping((HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, sizeof(SData), Name);
            if (hdl != 0)
            {
                    if (GetLastError() == ERROR_ALREADY_EXISTS)
                    {
                            CloseHandle(hdl);
                            hdl = OpenFileMapping(FILE_MAP_WRITE, false, Name);
                    }
            }
            return hdl;
    }
    Dans ton 1er processus qui ecrit :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SData *data;
    HANDLE hMap = ObtainMappingHandle("TonMapFile");
     
    data = (SData *)MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0);
     
    // et ensuite tu peux ecrire dedans :
    data->truc = 45;
    strcpy(data->machin, "Ca marche !");
     
    UnmapViewOfFile(data);
    Dans ton 2e processus qui lit :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SData *data;
    int i;
    char test[255];
    HANDLE hMap = ObtainMappingHandle("TonMapFile");
     
    data = (SData *)MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);
     
    // et ensuite tu peux lire dedans :
    i = data->truc;
    strcpy(test, data->machin);
     
    UnmapViewOfFile(data);

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Communication entre processus
    Par annemarie dans le forum Windows
    R�ponses: 3
    Dernier message: 11/05/2009, 15h47
  2. [C#]Communication entre processus
    Par ShamSS dans le forum C#
    R�ponses: 5
    Dernier message: 28/02/2009, 19h39
  3. communication entre processus
    Par gerard tarquin dans le forum G�n�ral Python
    R�ponses: 12
    Dernier message: 13/06/2007, 12h29
  4. [VB.Net][Threading] Communication entre processus
    Par DonF dans le forum Windows Forms
    R�ponses: 2
    Dernier message: 21/02/2006, 15h15
  5. Communication entre processus
    Par markopolo dans le forum C++Builder
    R�ponses: 2
    Dernier message: 26/06/2003, 16h21

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