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 :

CreateFile et FILE_FLAG_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 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Février 2009
    Messages : 15
    Par défaut CreateFile et FILE_FLAG_OVERLAPPED
    Bonjour,
    après avoir fais quelques recherche et pas trouvé de réponse je viens poster ici.

    Mon but est de créer une image .tif
    j'utilise la fonction CreateFile et comme argument le FILE_FLAG_OVERLAPPED

    D'après les exemples trouvé sur le net cette arguement est utilisé uniquement avec les Port Com. Est ce qu'il est possible que je l'utilise dans mon cas pour créer mon .tif ?

    J'ai bien sur essayer avec d'autre arguments à la place de FILE_FLAG_OVERLAPPED comme FILE_ATTRIBUTE_NORMAL
    mais le problème est qu'il me faut une vitesse d'écriture sur disque importante que ,j'espère, me fournira le FILE_FLAG_OVERLAPPED.

    Il est dit aussi qu'une structure de type OVERLAPPED doit être initialisé mais je n'ai pas trouvé d'exemple ou d'utilisation autre qu'avec les port Com

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HANDLE hFile = CreateFile(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_FLAG_OVERLAPPED , NULL);
    OVERLAPPED ovl;
    Merci d'avance pour tout aide apporté.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Bien que ne l'ayant jamais essayé, je dirais que rien ne l'interdit pour un fichier. Il en résultera que les lectures et les écritures seront asynchrones (la fonction retournera même si l'écriture n'est pas terminée).
    Par contre, je ne suis pas sûr que tu puisses positionner la vitesse d'écriture du disque.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Février 2009
    Messages : 15
    Par défaut
    Merci pour le réponse rapide.

    Il me reste tout de même un problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool ok=WriteFile(hFile, _TiffHeader, sizeof(TifHead), &iWrittentmp, NULL);
    Lorsque mon create file à FILE_FLAG_OVERLAPPED le write file me retourne false et rien n'est écrit dans mon fichier.

    Je ne cherche pas à positionner la vitesse d'écriture c'est juste que je pense que le mode asychrone soit le plus rapide car justement on ne bloque pas dedans la fonction le temps de l'écriture.

    Mais je n'ai pas vraiment compris ce que je devais faire avec la structure OVERLAPPED qui est utilisé avec ce flag

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Effectivement, si tu positionnes le flag FILE_FLAG_OVERLAPPED, tu dois fournir une instance de OVERLAPPED à la fonction WriteFile.
    2 solutions:
    1/ Soit tu as réellement besoin que les écritures soient asynchrones : alors il faut que tu gère une telle variable avec la synchronisation. Mais là, c'est un peu plus costaud. Il faut passer une variable de la structure dont la durée de vie est au moins égale à la durée de l'opération. Tu peux te synchroniser sur l'écriture avec GetOverlappedResult (mais pourquoi être asynchrone alors?). Et, je ne sais pas comment sont gérés les accès concurrents (plusieurs écritures les unes à la suite des autres sans attendre la fin de la précédente). Il doit certainement il y avoir un cache, donc à gérer un échec à demande d'écriture dès que le cache est plein... Probablement, qu'il te faudra prévoir un mécanisme de type multithread ou traitement dans OnIdle. Donc la question est : as-tu vraiment besoin d'être asynchrone ?

    2/ Soit tu n'as pas vraiment besoin d'être asynchrone : passes-toi du flag overlapped.

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

Discussions similaires

  1. Difference entre CFile et CreateFile et fopen
    Par barthelv dans le forum MFC
    Réponses: 7
    Dernier message: 22/10/2005, 11h02
  2. qq' expl. rudimentaires de CreateFile ?
    Par JuanLopez1966 dans le forum Windows
    Réponses: 5
    Dernier message: 07/09/2004, 11h06
  3. CreateFile: erreur "privileged instruction"
    Par Magus (Dave) dans le forum MFC
    Réponses: 5
    Dernier message: 24/08/2004, 21h38
  4. Réponses: 3
    Dernier message: 23/06/2004, 21h17
  5. CreateFile
    Par PEM dans le forum C++Builder
    Réponses: 2
    Dernier message: 31/07/2002, 15h33

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