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

Visual C++ Discussion :

Utilisation de SetCommTimeouts()


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut Utilisation de SetCommTimeouts()
    Bonsoir,

    Lorsque qu'on définit une structure COMTIMEOUT, par exemple un timeout de 2000ms pour l'intervalle max de lecture entre deux caractères, cela signifie t'il que lorsqu'on appelle la fonction ReadFile(), celle-ci ne retourne pas tant que le timeout n'est pas écoulé?

    Je précise que dans mon cas, ReadFile() attend un nombre de caractère indéfini et je désire récupérer en une lecture l'ensemble de mes données.

    Merci.

    Nicolas

  2. #2
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Bonjour,

    Désolé de relancer mon message, je me suis à nouveau repenché sur l'utilisation de la fonction SetCommTimeouts et je ne cerne toujours pas la manière dont l'utiliser.

    Une fois le timeout réglé, quand j'effectue une ReadFile sur le com, il semble que le buffer de réception est lue, point final, sans se soucier si d'autres données arrivent.

    La solution unique est elle donc de venir lire plusieurs fois le buffer de réception en vérifiant au préalable si on a bien recu de nouvelle données ou il y a t'il une possiblité de jouer avec le réglage des timeouts?

    J'ai l'impression que mon soucis vient d'une mauvaise compréhension de l'utilisation des timeouts...

    Merci

    Nicolas

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par défaut
    bonjour

    Tu peux mettre un bout de code de ton read
    et de la déclaration de ta com

    cordialement

  4. #4
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Oui je vais faire cela.

    Mais j'y pense, c'est peut être du au fait que j'utilise une communication série asynchrone... (Utilisation de la structure OVERLAPPED)

    Et si c'est bien cela, la solution est obligatoirement celle ci?
    Citation Envoyé par moi
    La solution unique est elle donc de venir lire plusieurs fois le buffer de réception en vérifiant au préalable si on a bien recu de nouvelle données

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 417
    Par défaut
    tu peux très bien faire une lecture de ton port sans utiliser de t/o.

    par exemple en win32
    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
     
    memset (bof,0, sizeof (bof));
     
    osReader.hEvent = CreateEvent(NULL, true, false, NULL);
    if (osReader.hEvent == NULL) return false;
     
    if (fWaitingOnRead == false)
    {
    	if (!ReadFile(hComm, bof, READ_BUF_SIZE, &dwRead, &osReader)) 
    	{
    		if (GetLastError() != ERROR_IO_PENDING) return false;
    		else fWaitingOnRead = true;
    	}
    }
     
    puis la gestion des erreurs ou le flag fWaitingOnRead repasse a false s il n y a pas d'erreurs (ou sinon tu vires le flag :P)

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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