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

 Delphi Discussion :

Utilisation de thread pour ne pas bloquer l'application ?


Sujet :

Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2014
    Messages : 143
    Points : 60
    Points
    60
    Par défaut Utilisation de thread pour ne pas bloquer l'application ?
    Bonjour,
    J'avais déjà posé une question (pour une ProgressBar) au sujet de l'application que je suis en train de me développer pour le fun mais cette fois-ci j'en ai une autre.
    Je suis donc en train de me développer une appli de hash MD5 / SHA-1 / SHA-256 pour le moment. Les fonctions de hash sont OK et fonctionnent sans problème (j'utilise Dcrypt pour info).
    Je liste donc mes fichiers dans un StringGrid avec plusieurs colonnes Nom de fichier, Taille, Date de modification et Hash, et j'appelle la fonction pour hasher fichier par fichier.
    Le problème c'est que pour le moment je n'ai pas encore mis en place de thread, donc mon application reste parfois bloqué en apparence (mais tourne toujours) ou je ne peux pas resizer les colonnes du StringGrid par exemple en même que le hash des fichiers tourne.
    D'où ma question : vaut-il mieux faire un thread pour l'ensemble de la fonction qui fait le hash ou un thread pour la fonction spécifique dans la fonction hash ?
    Ou y a-t-il une autre solution pour que je puisse agir sur ma form principale (redimensionner les colonnes, naviguer dans la string grid...) pendant que mes fichiers se font hasher ?
    Merci !

  2. #2
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2014
    Messages : 143
    Points : 60
    Points
    60
    Par défaut
    Bon comme j'ai eu un peu de temps je me réponds tout seul et oui l'utilisation d'un thread pour englober la fonction de hash fonctionne bien.
    J'ai juste un petit problème : si j'utilise un Suspend et un Resume, le thread se met en pause et redémarrer sans problème, par contre si je fais un Terminate puis un WaitFor le programme freeze et je ne peux plus le fermer correctement. Je ne sais pas trop comment débuguer ce genre de problème. Toute aide est la bienvenue

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 393
    Points : 637
    Points
    637
    Par défaut
    dans la boucle de ton thread tu dois tester Terminate avant de lancer un Hash et quitter s'il est à true

    lis ce tutoriel si tu ne l'as pas déjà fait c'est une bonne base départ : http://reisubar.developpez.com/threadevents/

    tu devrais aussi éviter suspend et resume qui sont dépréciés

  4. #4
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2014
    Messages : 143
    Points : 60
    Points
    60
    Par défaut
    Merci pour la réponse.
    J'ai utilisé ce lien comme départ : http://delphi.developpez.com/faq/?page=Thread
    J'ai bien positionné une boucle d'attente du Terminated dans mon thread mais je freeze quand même.
    Je vais lire ton tuto, faire quelques tests et on verra la suite
    Merci !

Discussions similaires

  1. Utiliser les threads pour créer une fenêtre de LOG ?
    Par davidmarli dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2011, 15h01
  2. Obligé d'utiliser les threads pour faire un timer ?
    Par theclem35 dans le forum Débuter
    Réponses: 5
    Dernier message: 31/03/2011, 20h25
  3. Comment faire pour ne pas bloquer l'EDT?
    Par allouchi dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 20/07/2009, 22h00
  4. [Free Pascal] [Mac OS 10.4] Utilisation de threads pour un Core2Duo
    Par sojabio dans le forum Free Pascal
    Réponses: 1
    Dernier message: 31/03/2007, 22h10
  5. Utiliser les threads pour les traitements long
    Par rach375 dans le forum Websphere
    Réponses: 3
    Dernier message: 14/11/2006, 12h08

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