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

GTK+ avec Python Discussion :

[Freezes] Python+Threads sous Windows


Sujet :

GTK+ avec Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 8
    Points
    8
    Par défaut [CLOTURE] [Freezes] Python+Threads sous Windows
    Bonjour, je suis entrain de faire une application OpenSource en PyGTK+Glade. J'aimerais avoir une compatibilité Windows pour toucher plus de public. Jusqu'ici, tout a toujours bien fonctionné sous Linux et assez bien sous Windows. Mais aujourd'hui je me retrouve avec un problème que je ne comprends pas.

    En fait, pour faire simple, j'ai une barre de progression (gtk.ProgressBarr) qui est mise à jour dans un thread (perso). Le truc c'est que quand j'entre dans mon thread, je fais un show() de ma progressbar et à la fin je fait un hide() mais ça a pour effet, sous Windows, de geler complètement mon interface.... plus moyen de rien faire, je suis obligé de tuer le processus... Or, sous Linux, tout fonctionne très bien !

    Une idée ?
    Merci !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Oui, il ne faut pas appeler de fonctions gtk+ depuis plusieurs threads à la fois... cf http://library.gnome.org/devel/gdk/s...k-Threads.html

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par teuf13 Voir le message
    Oui, il ne faut pas appeler de fonctions gtk+ depuis plusieurs threads à la fois... cf http://library.gnome.org/devel/gdk/s...k-Threads.html
    Ah, je m'en doutais un peu... mais je peux faire comment alors ? J'ai tenté quelque chose comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            gtk.gdk.threads_init()
            gtk.gdk.threads_enter()
            gtk.main()
            gtk.gdk.threads_leave()
    mais ça ne change rien.

    Ce qui m'inquiète c'est ça : "With the Win32 backend, GDK calls should not be attempted from multiple threads at all."

    Merci d'avance.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Tu peux peut être utiliser g_idle_add pour que les appels gtk+ que tu souhaites effectuer à partir d'un autre thread "migrent" vers le thread principal ? Le callback de g_idle_add est toujours appelé depuis le thread principal

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Bon j'ai modifié mon code en changeant mes appels de méthodes GTK par un gobject.idle_add(callback). Le prob c'est que maintenant, de temps en temps, l'appli crashe en me disant que mon serveur XWindow l'a tuée XD. C'est du beau...

    Bon, d'ici demain soir je pourrais avoir accès à une machine Windows pour tester. Je vous ferais un feed back

  6. #6
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 47
    Points : 43
    Points
    43
    Par défaut
    Salut

    As tu essayé de faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    affichage de la progressbar
    appel du thread
    attente de son execution
    masquage de la progressbar
    Ce qui revient en fait à commander l'affichage ou non de la progressbar depuis le thread principal de l'application et non depuis ton thread perso.

    Enfin c'est juste une idée comme ça, je ne garantis rien...

    A+

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Hep !

    J'ai seulement pu tester aujourd'hui en vitesse. En fair le gobject.idle_add semble fonctionner .... Je clôture le topic. Je le réouvrirai au cas où...

    Merci de votre aide !

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

Discussions similaires

  1. [Parallèle] Création d'un thread, sous windows.
    Par z980x dans le forum Threads & Processus
    Réponses: 1
    Dernier message: 11/11/2008, 12h44
  2. [C] Thread sous windows
    Par ben78 dans le forum Windows
    Réponses: 1
    Dernier message: 07/12/2007, 23h54
  3. Latence et freeze du réseau sous Windows XP
    Par Cr@zyDeep dans le forum Windows XP
    Réponses: 8
    Dernier message: 20/11/2007, 23h09
  4. thread sous windows
    Par hedi07 dans le forum Windows
    Réponses: 12
    Dernier message: 25/04/2007, 19h21
  5. Threads sous Windows
    Par Geoff-sk8 dans le forum Windows
    Réponses: 2
    Dernier message: 23/10/2006, 10h23

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