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 :

ReadFile Asynchrone avec OVERLAPPED


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 45
    Par défaut ReadFile Asynchrone avec OVERLAPPED
    Bonjours, je viens lire les donnée sur un port USB avec un ReadFile
    et j'utilise le mode asynchrone:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    OVERLAPPED gOverlapped ;
          gOverlapped.Offset = 0;
          gOverlapped.OffsetHigh = 0;
          gOverlapped.hEvent=CreateEvent(NULL,FALSE,FALSE,NULL);
    
    
         Result = ReadFile(DeviceHandle, InputReport, Capabilities.InputReportByteLength, &BytesRead, &gOverlapped );
    Sa fonctionne quand je vais lire les donnée sur un périphérique, mais si mon périphérique ne renvois rien le programme reste bloquer dans le ReadFile, j'ai vu qu'il y avait un moyen d'utiliser Overlapped avec une sorte de timer pour pouvoir ressortir du readfille quand on es bloquer dedans mais j'ai pas compris comme sa fonctionnais!!!

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Il faut que l'ouverture ait été faite en mode Overlapped pour que ReadFile marche avec une telle structure.

    À ce moment-là, il n'y a pas de timeout, ReadFile() retourne toujours immédiatement.
    Par contre, tu peux utiliser une fonction d'attente sur l'Event, et dans celle-ci tu peux fixer un timeout.
    Si rien ne se produit dans les temps, une fois ton timeout écoulé, tu peux abandonner l'opération avec la fonction CancelIo().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 45
    Par défaut
    je comprend pas très bien :

    Il faut que l'ouverture ait été faite en mode Overlapped pour que ReadFile marche avec une telle structure.

    Comen sa???

    L'ouverture de quoi?

    ps. Je suispas un epxert en c++ mais plutot un débutant!

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    L'ouverture du périphérique, celle qui t'a retourné DeviceHandle.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 45
    Par défaut
    je crès mon DeviceHandle comme sa:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DeviceHandle = CreateFile(detailData->DevicePath,
          GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
          (LPSECURITY_ATTRIBUTES) NULL, OPEN_EXISTING, 0, NULL);
    commen je peu le faire en mode Overlapped?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 45
    Par défaut
    enfaite faudrai que je le mette comme sa:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    eviceHandle = CreateFile(detailData->DevicePath,
          GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
          (LPSECURITY_ATTRIBUTES) NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
    Ouai mais maintenent quand mon périférique envois des donnée ben sa lit les bonne donnée mais quand mon périférique renvois rien ben sa lit quand meme des données !

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Citation Envoyé par Médinoc
    Il faut que l'ouverture ait été faite en mode Overlapped pour que ReadFile marche avec une telle structure.

    À ce moment-là, il n'y a pas de timeout, ReadFile() retourne toujours immédiatement.
    Par contre, tu peux utiliser une fonction d'attente sur l'Event, et dans celle-ci tu peux fixer un timeout.
    Si rien ne se produit dans les temps, une fois ton timeout écoulé, tu peux abandonner l'opération avec la fonction CancelIo().
    Faut lire...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 45
    Par défaut
    Désoler je comprend pas bien là, enfaîte maintenant je reçois toujours les valeur donc je dois traiter les valeur que je reçois pour voir les quelle sont bonne?

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    NON.
    Ce que je dis, c'est que si tu ouvres le périphérique en overlapped, toutes les opérations dessus seront en overlapped.

    Entre autre, ça signifie que ReadFile() retourne avant d'avoir fini de lire.
    Donc, il ne faut pas toucher aux données avant d'avoir attendu l'Event avec succès.
    Et une fois la lecture finie, il faut consulter la valeur BytesRead pour savoir combien d'octets ont effectivement été lus par ReadFile().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 45
    Par défaut
    MAis quel 'Event ?

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

Discussions similaires

  1. Treeview asynchrone avec jQuery
    Par garthos dans le forum jQuery
    Réponses: 6
    Dernier message: 01/10/2010, 15h58
  2. Travailler en asynchrone avec un recordset ADO
    Par zoorgh dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 28/08/2008, 09h02
  3. [Débutant][|MSSQL 2000] problème avec Overlaps
    Par Spoutnik dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 14/11/2006, 10h33
  4. ReadFile Asynchronous
    Par Taron31 dans le forum Windows
    Réponses: 12
    Dernier message: 24/02/2006, 16h03
  5. Replication synchrone/asynchrone avec Oracle 8i
    Par Fraise des Bois dans le forum Oracle
    Réponses: 1
    Dernier message: 11/01/2006, 21h24

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