Thread wird erst ausgeführt wenn Programm beendet

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
scrawl
User
Beiträge: 40
Registriert: Mittwoch 20. August 2008, 17:04
Kontaktdaten:

Samstag 4. Oktober 2008, 13:43

Hi,

Ich habe ein Programm in GTK+ geschrieben, und wollte jetzt nen Thread drin einbauen:

Code: Alles auswählen

class UpdateThread(threading.Thread):
	def __init__(self, conf, updater):	
		threading.Thread.__init__(self)
		self.conf = conf
		self.updater = updater
	def run(self):
		print "test"
Beim Start des Programms wird dieser so aufgerufen:

Code: Alles auswählen

UpdateThread(conf, self).start()
Danach wird die GUI aufgebaut und gtk.main() aufgerufen.
Komischerweise wird der Thread aber erst gestartet, wenn ich das Programm beende, also das Fenster schließe!
Ist da jetzt ein Fehler in meinem Programm, oder hab ich nur den Sinn von Threads noch nicht richtig verstanden?
Ich wollte es eigentlich so haben, dass beim Start der GUI im Hintergrund nach einer neuen Programm-Version gesucht wird, aber eben in nem Thread, damit die GUI noch reagiert.
Hoffe ich hab mein Problem verständlich ausgedrückt...
MfG
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 4. Oktober 2008, 13:49

Ich habe mal den Thread verschoben...

Was willst du eigentlich machen? Ich habe so stark das Gefühl, dass das was du machen willst, ``gobject.timeout_add`` bereits kann.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
scrawl
User
Beiträge: 40
Registriert: Mittwoch 20. August 2008, 17:04
Kontaktdaten:

Samstag 4. Oktober 2008, 13:57

Der Thread soll mit der urllib eine Webseite aufrufen, was ohne einen Thread die GUI anhalten würde.

/Edit: es liegt anschienend an gtk.main() , wenn ich das auskommentiere und das Programm stattdessen in ne Endlosschleife schicke, wird der Thread direkt ausgeführt.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 4. Oktober 2008, 14:48

scrawl hat geschrieben:Der Thread soll mit der urllib eine Webseite aufrufen, was ohne einen Thread die GUI anhalten würde.
Ohne Thread geht es übrigens auch, GTK+ unterstützt Pseudothreads die idR. weniger Probleme machen als echte Threads.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
scrawl
User
Beiträge: 40
Registriert: Mittwoch 20. August 2008, 17:04
Kontaktdaten:

Samstag 4. Oktober 2008, 15:13

Meinst du das hier? Habs jetzt so versucht...

Code: Alles auswählen

		gtk.gdk.threads_init()
		gtk.gdk.threads_enter()
		# just testing..
		urllib.urlretrieve("http://www.google.de")
		urllib.urlcleanup()
		gtk.gdk.threads_leave()
Ergebnis ist immernoch das selbe, wird erst ausgeführt wenn ich auf X klicke :(
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 4. Oktober 2008, 15:24

Nein, das sind echte Threads. Ich meine ``gobject.idle_add``.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
scrawl
User
Beiträge: 40
Registriert: Mittwoch 20. August 2008, 17:04
Kontaktdaten:

Samstag 4. Oktober 2008, 17:05

Achso :) Danke, jetzt funktionierts!
Antworten