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

Python Discussion :

bloquer un thread


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 30
    Par défaut bloquer un thread
    Bonjour,

    J'a déja posté, mais mon soucis reste persisant :

    j'ai un Thread qui lance une wx.Frame et je souhaiterais savoir si il est possible que ce thread poursuive les instructions qui suivent le
    " frame.show() " pas avant que l'utilisateur ai cliqué sur le bouton de la frame ... ??

    en gros la, il lance la vue mais continue .. donc le thread se termine et la vue aussi ...

    merci bien

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Si une fenêtre est modale (c-à-d que l'utilisateur doit finir d'interagir avec cette fenêtre pour revenir au programme), il ne faut pas la lancer dans un thread.

    Quoique, lancer une fenêtre graphique dans un thread me surprend beaucoup.

    Si tu nous montrais ce code, ça faciliterait les choses.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 30
    Par défaut
    montrer du code je pense qu'au contraire compliquerais.
    Vous rentreriez dans des détails futiles je pense.

    EN fait : le truc, j'ai une vue "main" qui permet de sélectionner un fichier texte, et d’interpréter son contenu pour l’exécuter.

    2 boutons majeurs : pas à pas et tout exécuter.
    Ainsi, cliquer sur le "tout exécuter" lance un thread qui va réaliser une boucle sur les lignes. pourquoi un thread ? parce que si j'en utilise pas, ben pendant l’exécution, l'utilisateur n'a plu la main sur les boutons. (il ne peut pas mettre "pause" par exemple.)
    Mais dans le thread il y a une Vue. vous comprenez mon soucis ?

    merci de vos propositions !

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je ne connais pas du tout wxpython, mais je ne crois pas qu'il soit "thread-safe" (http://stackoverflow.com/questions/1...-wxpython-gage).

    Je travaille sous PyQt4, et c'est la même chose: les threads ne doivent pas toucher directement au graphique, mais les échanges de messages fonctionnent avec la partie graphique: on peut donc placer les tâches longues (de calcul par exemple) dans des threads, et assurer la synchro avec la graphique par messages: ça marche très bien.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 30
    Par défaut
    C'est vraiment dingue le python !!

    Mon thread fonctionnait mal avec la vue parce que à la place de

    a = threading.Thread(None, self.Automate(), None, {},{})

    'avais ecris (sans les paranthèses) :

    a = threading.Thread(None, self.Automate, None, {},{})


    quelqu'un sais POURQUOI il executait qd même la fonction SANS les paranthèses ?

    def Automate(self):
    ...
    corps
    ...

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Non, il ne faut pas mettre les parenthèses, sinon Python l'appellera tout de suite. Par contre c'est la méthode start() qui le fera.

    Si tu nomes tes arguments, tu ne dois pas tous les mettre
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    threading.Thread(target=my_fonction, args=(None,)).start()

Discussions similaires

  1. arrêter un thread bloquer sur E/S ?
    Par rimas2009 dans le forum Général Java
    Réponses: 8
    Dernier message: 25/06/2009, 12h45
  2. Bloquer la main pour un thread
    Par FabaCoeur dans le forum C
    Réponses: 2
    Dernier message: 15/02/2009, 12h19
  3. Multiple thread peuvent ils bloquer (EDT) malgre invokeLater
    Par murgen23 dans le forum EDT/SwingWorker
    Réponses: 3
    Dernier message: 12/09/2008, 07h56
  4. Réponses: 7
    Dernier message: 03/05/2006, 16h13
  5. bloquer le changement de thread
    Par Biosox dans le forum Threads & Processus
    Réponses: 5
    Dernier message: 26/01/2006, 22h52

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