Ja, das ist mir klar.
Aber ich verstehe immer noch nicht, warum Signale eingesetzt werden sollen. Wenn man mit ``idle_add`` eine emit Funktion aufruft, kann man doch gleich die Methode direkt aufrufen, die mit dem Signal aufgerufen werden würde.
GTK und Threads / Threading, Gobject !?
Wir reden offensichtlich aneinander vorbei.
Die Frage zielt eher in Richtung generelle Sinnhaftigkeit von Signalen, die Dir sicherlich klar ist. Womit auch die Frage beantwortet sein sollte. (Ich habe das auch schon mehrfach in diesem Forumthread angerissen.)Aber ich verstehe immer noch nicht, warum Signale eingesetzt werden sollen. Wenn man mit ``idle_add`` eine emit Funktion aufruft, kann man doch gleich die Methode direkt aufrufen, die mit dem Signal aufgerufen werden würde.
Letztlich lässt sich das alles ohne konkreten Code des Threads doch gar nicht sagen. Die ursprüngliche Idee ist es ja, serielle Geräte anzusteuern. Zumindest nach meiner Vorstellung muss aber Code, der ein Gerät steuert, nichts über die GUI wissen.
Und dann ist eben die Frage, wie man diesen allgemeinen, von der GUI unabhängigen Code jetzt in die GUI einbindet. Eine Möglichkeit wären eben einfach Callbacks (in oder ohne Verbindung mit einem Thread, mit oder ohne dass der Aufrufer den Callback indirekt durch `gobject.idle_add()` aufruft (man kann ja auch einfach `gobject.idle_add` als Callback übergeben)), eine andere Möglichkeit wären sicherlich aber auch Signale. Signale sind in GUIs nichts ungewöhnliches und man könnte damit dann solche Sachen machen, dass man ein Logging-Fenster hat, das einfach nur die rohen Daten anzeigt, die empfangen werden und dass man ein Fenster hat, in dem diese Daten dann grafisch aufbereitet werden. Mit Signalen kann man nun eben einfach das gleiche Objekt mehrfach unabhängig voneinander verwenden, was IMHO recht elegant ist, zumal einem die dazu benötigten Dinge zur Verfügung stehen, ohne dass man sie selber implementieren müsste.
Wie genau man es macht, hängt jetzt halt davon ab, was genau man vorhat und der persönliche Geschmack spielt sicherlich auch eine Rolle. Wichtig ist, und darum ging es mir in diesem Thread, dass man mit Threads eben aufpassen muss.
Und dann ist eben die Frage, wie man diesen allgemeinen, von der GUI unabhängigen Code jetzt in die GUI einbindet. Eine Möglichkeit wären eben einfach Callbacks (in oder ohne Verbindung mit einem Thread, mit oder ohne dass der Aufrufer den Callback indirekt durch `gobject.idle_add()` aufruft (man kann ja auch einfach `gobject.idle_add` als Callback übergeben)), eine andere Möglichkeit wären sicherlich aber auch Signale. Signale sind in GUIs nichts ungewöhnliches und man könnte damit dann solche Sachen machen, dass man ein Logging-Fenster hat, das einfach nur die rohen Daten anzeigt, die empfangen werden und dass man ein Fenster hat, in dem diese Daten dann grafisch aufbereitet werden. Mit Signalen kann man nun eben einfach das gleiche Objekt mehrfach unabhängig voneinander verwenden, was IMHO recht elegant ist, zumal einem die dazu benötigten Dinge zur Verfügung stehen, ohne dass man sie selber implementieren müsste.
Wie genau man es macht, hängt jetzt halt davon ab, was genau man vorhat und der persönliche Geschmack spielt sicherlich auch eine Rolle. Wichtig ist, und darum ging es mir in diesem Thread, dass man mit Threads eben aufpassen muss.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)