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

MFC Discussion :

COM série:comment arrêter waitCommEvent en mode synchrone


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 37
    Par défaut COM série:comment arrêter waitCommEvent en mode synchrone
    Bonjour,

    Je développe une application sur windows CE, la gestion de port série en mode asynchrone semble non supporté par Windows CE:
    flag FILE_FLAG_OVERLAPPED dans la méthode CreateFile non supporté
    paramètre LPOVERLAPPED dans la méthode ReadFile doit être NULL.

    Donc je suis emmené à travailler en synchrone.
    Lorsque j'appelle la méthode WaitCommEvent, cette dernière bloque le thread où (elle est appelée) ainsi que toutes les autres threads qui tentent d'effectuer une opération sur la liaison série (par exemple, remettre à l'état bas le signal DTR , écriture ...)

    D'après les info que j'ai pu récupérer sur le web, il est impossible de définir un time out pour cette méthode WaitCommEvent.

    Supposons que je prends soin de ne faire aucune autre opération sur le com lorsque WaitCommEvent est bloquée.
    Mais comment faire pour fermer proprement mon application? car le thread est toujours bloquée sur WaitCommEvent et je n'arrive pas fermer le port en faisant un CloseHandle de handle de port COM.

    Si il faut bannir l'utilisation de WaitCommEvent en mode synchrone, comment pourrais je gérer proprement et correctement les cas d'erreurs ( exemple cable arraché, ou équipement COM éteint => changement de l'état DSR ...).

    J'aurai besoin donc
    - un thread qui vérifie à chaque intervalle de temps (30ms par exemple) l'état de mes signaux de controle du port COM.
    - un thread pour la lecture périoque tous les x ms
    - un thread pour l'écriture

    Cela fait donc 3 threads en plus de threads de traitements des données reçues, et j'ai peur pour la performance de mon appli vue qu'elle tournera sur un PDA.

    Quelqu'un pourra me conseiller pour mieux gérer tout cela?

    merci d'avance,

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    oui c'est un sujet qui revient de temps en temps.
    le mode asynchrone n'est pas disponible en windows CE. (ce que je ne comprends pas !)
    as tu définit des évènements a attendre dans SetCommask ?

  3. #3
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 37
    Par défaut
    oui, en fait les évenements qui m'intéressent les plus sont la réception de charactères (EV_RXCHAR), ainsi que changement d'état de DSR (EV_DSR) pour être informé du débranchement de l'équipement COM.

    Si je ne peux pas utiliser WaitCommEvent, cela implique que je dois avoir un thread qui boucle sans arrêt (toutes les 50ms par exemple) pour vérifier l'état de mon signal DSR.
    Ce qui ne me parait pas être la meilleure solution.

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    je ne vois pas d'autres solutions , il faudra appeler GetCommMask pour avoir le status de la ligne..
    le problème c'est que ton thread risque de "stresser " le cpu ...
    note:
    tiens nous au courant (surtout moi ) je risque d'avoir le même sujet a traiter sur un PSION...

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/03/2009, 11h05
  2. Réponses: 2
    Dernier message: 07/02/2006, 12h13
  3. Comment arréter de recevoir des spam?
    Par argon dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 01/10/2005, 19h11
  4. VBA/xl97 - Comment arrêter un timer ds user32.dll
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/09/2005, 17h45
  5. Réponses: 18
    Dernier message: 06/04/2005, 14h09

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