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

WinDev Discussion :

Gestion de la progression par thread avec passage de paramètres


Sujet :

WinDev

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Gestion de la progression par thread avec passage de paramètres
    Bonsoir,
    Je souhaite pour une de mes applications, créer un indicateur de décompression qui, durant la décompression d'une archive, indiquera la taille du dossier de destination par rapport à la taille finale, afin que l'utilisateur puisse suivre la progression de la décompression.

    Une fenêtre pour choisir le répertoire de destination s'ouvre depuis l'interface de l'application. Une fois le choix fait, voici le code exécuté :

    SI SAI_Fichier<>"" ALORS
    zipOuvre("Zip",gsRep+"Data\Fichiers.zip")
    nZptaille est un entier=zipTaille("Zip",Faux)
    OuvreSoeur(ExtractionZIP)
    ThreadExécute("Extractiond1zip",threadNormal,Extraire,nZptaille,SAI_Fichier)
    zipExtraitTout("Zip Icon",SAI_Fichier)
    ThreadArrête("Extractiond1zip")
    Ferme(ExtractionZIP)
    SI ErreurDétectée ALORS
    Erreur("Une erreur est survenue lors de l'extraction de l'archive :",ErreurInfo(errMessage))

    SINON
    Info("L'extraction a été effectuée avec succès.")
    FIN
    zipFerme("Zip")
    Ferme(Extraction)
    FIN
    Une procédure est ouverte par le biais d'un thread. Malheureusement, le programme continu, sans exécuter le contenu de la procédure que voici :
    PROCEDURE Extraire(tailleinit,adresseextr)
    rap est un entier
    tailledes est une entier
    ExtractionZIP.LIB_Libellé1="0 mo/"+TailleVersChaîne(tailleinit,tailleMo)
    MultitâcheRepeint(ExtractionZIP)
    TANTQUE tailledes<tailleinit
    tailledes=fRepTaille(adresseextr)
    ch est une chaîne=TailleVersChaîne(tailledes,tailleMo)+"/"+TailleVersChaîne(tailleinit,tailleMo)
    ExtractionZIP.LIB_Libellé1=ch
    MultitâcheRepeint(ExtractionZIP)
    FIN
    Cette procédure permet l'actualisation en temps réel de la fenêtre de progression.

    Je ne vois pas d'où viens le problème, et suis ouvert à toutes modifications de code, conseils, et surtout solutions.

    Merci d'avance.

  2. #2
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 801
    Points
    3 801
    Par défaut
    Bonjour...

    J'ai pas tout regarder ton code ni essayé de voir ce qui clochait mais je me demande pourquoi tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FinProgramme(nZptaille,SAI_Fichier)
    A quoi ça te sert???

    Car pour moi une fois ta fenêtre soeur ouverte tu ferme ton programme. Mais je peux me tromper. Tu peux m'expliquer??

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour DeeTwo et bienvenue sur le forum !

    Tu ne dis pas quelle version de WinDev tu utilises.

    Sans présumer de ta réponse au message de mail.spam, et n'ayant pas non plus une réponse précise à ta question, je voulais quand même t'orienter vers l'aide en ligne de WinDev.

    En effet, durant la décompression, la fonction zipExtraitTout() envoie une succession de messages JaugeCompactage (1174) qui indiquent la progression de l'opération (via la variable _EVE.wParam qui contient le pourcentage du fichier déjà décompressé).

    Au lieu d'utiliser un thread, tu peux brancher sur ce message ta procédure d'affichage du nombre d'octets décompressés.

    Voilà l'exemple n° 2 donné dans l'aide en ligne de WinDev 12.
    Au lieu d'afficher une jauge, tu peux l'adapter pour mettre à jour ton champ ExtractionZIP.LIB_Libellé1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    --Code de déclaration de la fenêtre
    GLOBAL
    NomArchive est une chaîne = "MonArchive"
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    --Code de clic sur BoutonExtraitFichier
    // Initialisation
    NomRépertoire est une chaîne
    CodeErreurCréation est un entier
    CodeErreurAjout est un entier
    CodeErreurExtrait est un entier
    NumEvénement est un entier
     
    // Création d'une archive
    CodeErreurCréation = zipCrée(NomArchive, "C:\Répertoire\Archives\ArchivePdf.wdz")
     
    SI CodeErreurCréation = 0 ALORS
       // Sélection du répertoire
       NomRépertoire = fRepSélecteur("", "", "Répertoire à ajouter")
       // Ajoute la totalité des fichiers du répertoire sélectionné
       // et de ses sous-répertoires dans l'archive
       CodeErreurAjout = zipAjouteRépertoire(NomArchive, NomRépertoire, Vrai, zipRépertoire)
       SI CodeErreurAjout = 0 ALORS
          // Appel de l'événement
          NumEvénement = Evénement("JaugeCompression", FenEnExecution(), JaugeCompactage)
          // Extraction et décompression des fichiers dans le répertoire courant
          CodeErreurExtrait = zipExtraitTout(NomArchive, zipRépertoire)
          SI CodeErreurExtrait <> 0 ALORS
             Erreur(zipMsgErreur(CodeErreurExtrait))
          FIN
          FinEvénement(NumEvénement)
      SINON
          // Affichage du message d'erreur si les fichiers n'ont pas été ajoutés
          Erreur(zipMsgErreur(CodeErreurAjout))
      FIN
    SINON
       // Affichage du message d'erreur si l'archive n'a pas été créée
       Erreur(zipMsgErreur(CodeErreurCréation))
    FIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Procédure locale à la fenêtre. Cette procédure permet de gérer la jauge.
    PROCÉDURE JaugeCompression(wMesssage, wParam, lParam)
    SI wParam<100 ALORS
        Jauge(wParam, 100, zipFichierEnCours(NomArchive))
        // Rafraîchissement de la fenêtre
        Multitache(-1)
    SINON
       // La compression est terminée
       Jauge()
    FIN

  4. #4
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Bonsoir,
    Pour répondre à Mail.Spam, cette ligne de fermeture est un oubli dans la version du code publié. Cette ligne n'est en aucun cas présente dans le code de mon programme, et ce n'est pas d'elle que vient le problème.

    Pour répondre à =JBO=, j'aurais quant même préféré utiliser un affichage de la taille décompressée sur la taille restante. Mais mon code ne fonctionne pas. Sinon, je me rabattrai sur la jauge de décompression.
    Quant à l'exemple que tu cite, il est valable pour la compression. Mais c'est le même principe pour la décompression.

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Citation Envoyé par DeeTwo Voir le message
    Pour répondre à =JBO=, j'aurais quant même préféré utiliser un affichage de la taille décompressée sur la taille restante.
    Tu peux arriver à ce résultat en utilisant la technique de gestion de l'événement JaugeCompactage.

    Tu connais la taille du fichier à décompresser. Elle est enregistrée dans la variable nZptaille. Fais en une variable globale.

    Et dans la procédure appelée pour traiter le message JaugeCompactage, pour obtenir la taille décompressée, c'est facile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nZptaille * (wParam / 100)
    Tu n'a pas besoin d'aller lire la taille réelle du fichier dans le système de fichiers.
    Non ?
    _

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

Discussions similaires

  1. Thread avec passage de paramétres
    Par gastoncs dans le forum VB.NET
    Réponses: 2
    Dernier message: 05/09/2014, 09h37
  2. Réponses: 4
    Dernier message: 02/05/2007, 16h18
  3. problème de includes avec passage de paramètres
    Par roxxxy dans le forum Langage
    Réponses: 4
    Dernier message: 10/04/2007, 14h28
  4. Fonction ouvre avec passage de paramètres
    Par nath-0-0 dans le forum WinDev
    Réponses: 4
    Dernier message: 20/11/2006, 12h51
  5. [Système] Appel d'un exe avec passage de paramètres
    Par licorne dans le forum Langage
    Réponses: 2
    Dernier message: 04/05/2006, 12h57

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