Seite 1 von 1

Thread wird erst ausgeführt wenn Programm beendet

Verfasst: Samstag 4. Oktober 2008, 13:43
von scrawl
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

Verfasst: Samstag 4. Oktober 2008, 13:49
von Leonidas
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.

Verfasst: Samstag 4. Oktober 2008, 13:57
von scrawl
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.

Verfasst: Samstag 4. Oktober 2008, 14:48
von Leonidas
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.

Verfasst: Samstag 4. Oktober 2008, 15:13
von scrawl
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 :(

Verfasst: Samstag 4. Oktober 2008, 15:24
von Leonidas
Nein, das sind echte Threads. Ich meine ``gobject.idle_add``.

Verfasst: Samstag 4. Oktober 2008, 17:05
von scrawl
Achso :) Danke, jetzt funktionierts!