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

Windows Discussion :

Précision sur les tubes nommés


Sujet :

Windows

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 21
    Points : 15
    Points
    15
    Par défaut Précision sur les tubes nommés
    Bonjour,

    Je fais fasse à un problème de conception conernant les tubes nommés (Named pipe) sous windows. Il y a un cas de figure :

    - Premier cas :
    D'un côté il y a un "serveur pipe" et de l'autre un "client pipe". Le client utilise la fonction "WriteFile" pour communiquer à travers le pipe avec le serveur. Cependant, le client attend une réponse du serveur donc il fait appel à la fonction "ReadFile". Par ailleurs, le serveur n'a pas encore fait appel à la fonction "WriteFile" pour répondre au client.

    Est-ce que ce comportement est valide ?

  2. #2
    Membre habitué Avatar de r2d2abc
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 212
    Points : 179
    Points
    179
    Par défaut
    regarde ici
    ms-help://MS.MSDNQTR.v90.fr/ipc/base/multithreaded_pipe_server.htm
    et ici
    ms-help://MS.MSDNQTR.v90.fr/ipc/base/named_pipe_client.htm
    hope this helps
    ...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    regarde ici
    ms-help://MS.MSDNQTR.v90.fr/ipc/base/multithreaded_pipe_server.htm
    et ici
    ms-help://MS.MSDNQTR.v90.fr/ipc/base/named_pipe_client.htm
    J'avais déjà vu ces deux liens. En fait dans cet exemple comme dans tous les autres exemples, le serveur attend une connexion, créé une instance et ensuite une lecture suivi directement par une écriture se fait et ensuite déconnexion de l'instance. Pour le client c'est la même chose. Alors, est-ce qu'à chaque que je veut "discuter" avec le serveur pipe je doit me connecter et ensuite me déconnecter ?

    Cependant, cela ne répond pas à ma question initiale. En gros, j'aimerais savoir s'il est prévu par l'API d'appeler la fonction "ReadFile" alors qu'il n'y a rien à lire dans le pipe et qu'elle se mette en quelquesorte en attente d'une écriture.

    J'ai fait le test j'ai un freeze sur la fonction "WriteFile" lorsque le "ReadFile" est appelé avant. J'ai regardé sur l'API sur msdn je n'ai rien trouvé qui puisse me permettre "d'attendre" avant l'appel de "ReadFile" (un genre de "select" utilise pour les sockets (file descriptor)).

    Cordialement

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 72
    Points : 77
    Points
    77
    Par défaut
    Bonjour,

    Windows propose plusieurs mécanismes d'attente avec les pipes:
    - ReadFile() en mode "overlapped" qui permet de faire de la lecture asynchrone
    - ReadFileEx() qui est dédié à la lecture asynchrone
    - PeekNamedPipe() combiné à Sleep() ou WaitForSingleObject() ou WaitForMultipleObjects() dans une boucle permet d'interroger le pipe régulièrement sans enlever les données

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    DWORD ByteToRead;
    HANDLE HndPipe;
    BOOL RetVal;
    
    ... // code d'ouverture du pipe, etc.
    
    do
    {
       RetVal = PeekNamedPipe(HndPipe,NULL,0,NULL,&ByteToRead,NULL);
       if(RetVal)
       {
          if(ByteToRead)
          {
                RetVal = ReadFile(HndPipe,...);
                ... // Traitement
          }
          else Sleep(100);
       }
    }
    while(RetVal);

Discussions similaires

  1. Précision sur les makefile
    Par vinzzzz dans le forum Systèmes de compilation
    Réponses: 6
    Dernier message: 09/05/2006, 20h40
  2. [HTML][USEMAP] Précision sur les zones réactives
    Par cladsam dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/02/2006, 08h20
  3. Précisions sur les listes
    Par Virgile59 dans le forum Access
    Réponses: 1
    Dernier message: 07/02/2006, 21h20
  4. Précisions sur les recordset DAO
    Par Igricheff dans le forum VBA Access
    Réponses: 2
    Dernier message: 18/01/2005, 17h16
  5. Précision sur les sauvegarde à chaud
    Par alxkid dans le forum Administration
    Réponses: 2
    Dernier message: 09/08/2004, 18h55

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