2015-01-05 3 views
5

Gibt es eine Möglichkeit, den Haupt-Thread wie jeden anderen Thread mit den C++ 11 (oder späteren) Funktionen zu behandeln? Konkret suche ich nach der Fähigkeit join() mit dem Hauptthread. Also, im Grunde möchte ich etwas tun wie: main_thread.join(), aber weiß nicht, wie man das Objekt main_thread erhalten.Ist es möglich, ein Thread-Objekt für den Haupt-Thread und `Join()` damit zu bekommen?

Die Threadkonstruktoren scheinen keine Funktionen zu bieten, die zum Beispiel auf der mit get_id() erhaltenen Thread-ID basieren. Der Namespace this_thread bietet auch nur minimale Funktionalität, aber vermisst zum Beispiel join(), wonach ich suche.

+0

Normalerweise starten Sie einen Thread aus dem Haupt-Thread und dann() den Thread, den Sie gestartet haben .. nicht umgekehrt. – KoKuToru

+0

[std :: thread :: join] (http://en.cppreference.com/w/cpp/thread/thread/join) Methode gibt es für C++ 11.Was Problem ist? – Ankur

+0

Er ... Wenn Sie dem Hauptthread beitreten möchten, was ist der Unterschied zum Beenden des aktuellen Threads? Es ist nicht so, als würdest du jemals weitermachen; Das Programm ist beendet, wenn der Haupt-Thread endet. – Wintermute

Antwort

3

Wie in den Kommentaren von @molbdnilo und @yohjb (siehe auch What happens to a detached thread when main() exits?) erwähnt, sagen C++ 11 Semantik, dass alle Threads beendet sind, wenn die main() Funktion beendet wird. Da C++ 11 keine pthread_exit() Entsprechung hat, kann der Haupt-Thread nicht verbunden werden, da das Programm sowieso enden würde.

Also, um meine Frage zu beantworten, scheint es nicht möglich zu sein, und mit der abschließenden Semantik von main() wäre es nicht sehr nützlich.

+0

FYI das musste kein Community Wiki sein! Es ist eine vollkommen vernünftige Frage und Antwort. –

Verwandte Themen