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 :

Wait sur COM serie


Sujet :

Windows

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Décembre 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 102
    Points : 66
    Points
    66
    Par défaut Wait sur COM serie
    Bonjour,

    Je cherche à faire un WaitForMultipleObjects sur 2 handles :
    - un sémaphore et
    - un fichier ouvert sur port série ("COM1" par exemple).

    Mon problème c'est que je sors immédiatement du Wait sur le handle du port serie. Comme s'il était tout le temps signalé. Hors quand je fais un read dessus le read est bloquant. Donc je pense que je n'ai pas compris comment fonctionne l'état de cet objet. Dans ma compréhension il est signalé quand il y a qqch à lire et non signalé quand il n'y a rien à lire.

    Je n'ai pas trouvé ma réponse dans la FAQ ni le tuto.

    Merci

  2. #2
    Membre du Club
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Décembre 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    A priori il n'y a pas bcps de gens inspirés par ce problème.

    Bref je n'ai pas trouvé de solution élégante. Mais j'ai trouvé l'API WaitCommEvent qui m'a permise de coder un truc approchant.

    D'abord il ne faut pas forcement utiliser le mode OVERLAPPED à l'ouverture. Mais j'ai utilisé :

    MesHandles[HDL_COM] = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    Ensuite il faut sélectionner l'événement qui nous intéresse :
    SetCommMask(MesHandles[HDL_COM], EV_RXCHAR);

    Enfin dans un second thread j'ai l'attente sur le port serie :
    if(WaitCommEvent(hCom, &MonMask, &AttenteWP) != 0)
    {
    hWP = OpenEvent(EVENT_MODIFY_STATE, FALSE, "ComWaitPoint");
    SetEvent(hWP);
    CloseHandle(hWP);
    }

    Et mon thread qui devait attendre sur 2 objets n'attends plus que sur un seul (j'ai "chainée" mon event série sur mon second event en quelques sortes) :

    WaitForSingleObject(MesHandles[HDL_WAIT], INFINITE); // HDL_WAIT est le meme que "ComWaitPoint"

    Pour rappel à l'origine mon idée etait de faire un truc plus simple de ce style :
    MesHandles[HDL_COM] = CreateFile("COM1", ......);
    MesHandles[HDL_WAIT] = OpenEvent(SYNCHRONIZE|EVENT_MODIFY_STATE, FALSE, "ComWaitPoint");
    WaitForMultipleObjects(2, MesHandles, FALSE, INFINITE)

    Voila c'était plus propre mais ca ne fonctionne pas. Donc il me faut un thread de plus sauf si vous me donner une meilleure solution.

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

Discussions similaires

  1. [RS232] Procédure d'acquisition de données sur port serie
    Par kazaboua dans le forum Composants
    Réponses: 6
    Dernier message: 12/05/2007, 11h55
  2. Question sur COM et CComPtr
    Par Barahn dans le forum MFC
    Réponses: 7
    Dernier message: 27/08/2005, 06h09
  3. [Port Serie]Probleme d'ecriture sur port serie
    Par GETah dans le forum Windows
    Réponses: 2
    Dernier message: 20/06/2005, 10h43
  4. A la recherche d'un soft pour dialoguer sur port serie
    Par Rudy 34 dans le forum Composants
    Réponses: 5
    Dernier message: 25/02/2005, 15h54
  5. [HARDWARE] APN usb sur port serie ou autre
    Par SuperOliV dans le forum Périphériques
    Réponses: 4
    Dernier message: 15/07/2004, 13h28

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