2015-01-05 8 views
5

C'è un modo per trattare il thread principale come qualsiasi altro thread con le strutture C++ 11 (o successive)? Concretamente, sto cercando è la possibilità di join() con il thread principale. Quindi, in sostanza, mi piacerebbe fare qualcosa del tipo: main_thread.join(), ma non so come ottenere l'oggetto main_thread.È possibile ottenere un oggetto thread per il thread principale e `join()` con esso?

I costruttori di thread non sembrano offrire alcuna infrastruttura basata, ad esempio, sull'ID di thread ottenuto con get_id(). Lo spazio dei nomi this_thread offre anche solo funzionalità minime, ma manca ad esempio join(), che è quello che sto cercando.

+0

In genere si avvia una discussione dal thread principale e quindi si aggiunge() il thread avviato .. non il contrario. – KoKuToru

+0

[std :: thread :: join] (http://en.cppreference.com/w/cpp/thread/thread/join) il metodo è lì per C++ 11. Qual è il problema? – Ankur

+0

E ... se vuoi unirti al thread principale, qual è esattamente la differenza per finire il thread corrente? Non è che continuerai a continuare; il programma termina quando termina il thread principale. – Wintermute

risposta

3

Come indicato nei commenti di @molbdnilo e @yohjb (vedere anche What happens to a detached thread when main() exits?), la semantica C++ 11 dice che tutti i thread sono terminati quando termina la funzione main(). Dato che C++ 11 non ha un equivalente pthread_exit(), non è possibile unire il thread principale, perché il programma terminerebbe comunque.

Quindi, per rispondere alla mia domanda, non sembra possibile, e con la semantica di chiusura di main(), non sarebbe molto utile.

+0

FYI questo non ha bisogno di essere wiki della comunità! È una domanda e una risposta perfettamente ragionevoli. –

Problemi correlati