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 :

Problème de threads


Sujet :

GTK+ avec Python

  1. #1
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 23
    Par défaut Problème de threads
    bonjour,

    j'essaie en ce moment de faire un système de chat à but didactique en utilisant la librairie graphique pygtk.
    je rencontre un problème lors de la réception d'un message avec le thread chargé de receptionner/afficher les messages:
    j'ai l'impression que gtk bloque le threads car celui-ci affiche les messages recus (enfait tout les messages a la suite sans le \n ) lorsque je ferme la fenetre gtk.

    voici le code:
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    import pygtk
    pygtk.require('2.0')
    import gtk,threading,socket
     
    class Treception(threading.Thread):
        def __init__(self,lesocket,maitre):
            threading.Thread.__init__(self)
            self.socket = lesocket
            self.maitre = maitre
     
        def run(self):
            print 'debut de run'
            message = "bla"
            while 1:
                message = self.socket.recv(1024)
                print 'message recu'
                if message=='quit':
                    pass
                else:
                    print message+"\n"
                    self.maitre.Tbuffer.insert(self.maitre.Tbuffer.get_end_iter(),"lui>"+message+"\n")
     
     
    class chat:
        def hello(self,widget,argument=None):
            self.Tbuffer.insert(self.Tbuffer.get_end_iter(),"toi>"+self.message.get_text()+"\n")
            self.lesocket.send(self.message.get_text())
            self.message.set_text('')
     
     
        def quitter(self,widget, argument = None):
            gtk.main_quit()
     
        def __init__(self,port,adress):
            self.creerinterface()
            self.creersocket(adress,port)
     
        def creersocket(self,adress,port):
            self.lesocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
            self.lesocket.connect((adress,port))
     
        def creerinterface(self):
     
            self.fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL)
            self.fenetre.connect('destroy',self.quitter)
            self.fenetre.resize(600,400)
     
            self.text = gtk.TextView()
            self.text.set_editable(False)
     
            self.message = gtk.Entry()
     
            self.Tbuffer = gtk.TextBuffer()
            self.text.set_buffer(self.Tbuffer)
     
            self.scroll = gtk.ScrolledWindow()
            self.scroll.add(self.text)
            self.scroll.show()
     
            self.bouton = gtk.Button("cliquez-moi")
            self.bouton.connect('clicked',self.hello,None)
     
            self.boitePrincipale = gtk.VBox(False,5)
            self.boitePrincipale.pack_start(self.scroll)
     
            self.boiteSecondaire = gtk.HBox(False,5)
            self.boiteSecondaire.pack_start(self.message)
            self.boiteSecondaire.pack_start(self.bouton,expand=False)
     
            self.boitePrincipale.pack_start(self.boiteSecondaire, expand = False)
     
            self.fenetre.add(self.boitePrincipale)
            self.boitePrincipale.show()
            self.boiteSecondaire.show()
            self.message.show()
            self.text.show()
            self.bouton.show()
     
            self.fenetre.show()
     
        def lancer(self):        
            gtk.main()
     
        def get_socket(self):
            return self.lesocket
     
    program = chat(1103,'127.0.0.1')
    reception = Treception(program.get_socket(),program)
    reception.start()
    program.lancer()
    sauriez vous m'aider?

  2. #2
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    Est-ce que cela pourrait être un problème de raffraichissement ?
    ( http://www.developpez.net/forums/vie...ighlight=pygtk )

    Tu peux essayer de rajouter alors cette ligne dans "else" du "while" de la fonction "run"

  3. #3
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 23
    Par défaut
    j'ai essayé mais aucun changement en vu.

    c'est peut-etre au moment de l'ecriture qu'il y a un probleme:
    le premier message que rje recoit s'affiche avec le retour a la ligne et je pense que le thread se bloque sur Tbuffer.insert puis se débloque lors de la fermeture de la fenetre.
    La boucle recommence et affiche le reste de la file d'attente du socket...

    donc la question à 10 000€ est: comment afficher le texte dans la boite de texte?

Discussions similaires

  1. Problème de thread : Plus de ressources système
    Par OliverSleep dans le forum C++Builder
    Réponses: 17
    Dernier message: 07/02/2006, 15h35
  2. [VB.NET] Problème de Thread
    Par Sadneth dans le forum ASP.NET
    Réponses: 26
    Dernier message: 31/01/2006, 10h12
  3. Problème synchronisation threads
    Par Linio dans le forum Concurrence et multi-thread
    Réponses: 19
    Dernier message: 11/01/2006, 16h57
  4. [MFC] Problème de Threads + Timers
    Par Invité dans le forum MFC
    Réponses: 8
    Dernier message: 30/11/2005, 10h51
  5. [VC++6][DX9] Problème de thread lors d'un blit ...
    Par grandjouff dans le forum DirectX
    Réponses: 2
    Dernier message: 12/06/2003, 22h22

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