Threads mit Glib

lgorse

Mitglied
Hallo,

ich würde gerne mit der glibmm einen Thread erstellen. Hab auf der Dokumentationsseite dieses Beispiel gefunden, allerdings ist mir das noch nicht so ganz schlüssig.

Code:
Glib::Thread *const producer = Glib::Thread::create(sigc::mem_fun(queue, &MessageQueue::producer), true);

Die create-Methode erwartet ja zwei Parameter. Der erste soll in irgendeiner Form die Funtkion darstellen, die aufgerufen werden soll durch den Thread. Allerdings ist es in dem Beispiel eine Methode von einer Klasse, ich würde dort aber gerne nur ein Funktion angeben. Geht das? Der zweite Parameter gibt an, ob der Thread "joinable" ist. Was heißt das? Die Dokumentation meint, dass die Ausführung so lange unterbrochen wird, bis der Thread fertig ist. Stimmt das? Damit ist doch eigentlich der ganze Vorteil eines Threads zerstört. Und noch eine letzte Frage: Wenn ich den Thread mit Glib::Thread::create(...) erstelle, startet er dann auch automatisch?

lg,
lgorse
 
Hi.
ich würde gerne mit der glibmm einen Thread erstellen. Hab auf der Dokumentationsseite dieses Beispiel gefunden, allerdings ist mir das noch nicht so ganz schlüssig.

Code:
Glib::Thread *const producer = Glib::Thread::create(sigc::mem_fun(queue, &MessageQueue::producer), true);

Die create-Methode erwartet ja zwei Parameter. Der erste soll in irgendeiner Form die Funtkion darstellen, die aufgerufen werden soll durch den Thread. Allerdings ist es in dem Beispiel eine Methode von einer Klasse, ich würde dort aber gerne nur ein Funktion angeben. Geht das?
Ja, das geht. Siehe die sigc++ Doku.
Der zweite Parameter gibt an, ob der Thread "joinable" ist. Was heißt das?
D.h. das man auf die Beendigung des Threads warten kann indem man join() aufruft.

Wenn ein Thread nicht joinable ist, dann läuft er entkoppelt von allen anderen Threads und man kann eben nicht join() aufrufen.
Die Dokumentation meint, dass die Ausführung so lange unterbrochen wird, bis der Thread fertig ist. Stimmt das?
Ja, wenn man join() aufruft.
Und noch eine letzte Frage: Wenn ich den Thread mit Glib::Thread::create(...) erstelle, startet er dann auch automatisch?
Ja. Aber das kannst du doch leicht ausprobieren...

Gruß
 
Zurück