Die Lebensdauer des Objekts und die Lebensdauer des nativen Threads sind nicht voneinander abhängig. Das Objekt kann jederzeit den Gültigkeitsbereich verlassen.
Von der boost::thread
Klasse documentation
So wie die Lebensdauer einer Datei von der Lebensdauer eines Iostream Objekt verschieden sein kann, die die Datei kann von dem Thread anders, die Lebensdauer eines Ausführungs-Thread repräsentiert sein Objekt, das den Thread der Ausführung darstellt. Insbesondere wird nach einem Aufruf von join() der Ausführungs-Thread nicht mehr existieren, obwohl das Thread-Objekt bis zum Ende seiner normalen Lebensdauer weiter existiert. Das Umgekehrte ist auch möglich; Wenn ein Thread-Objekt zerstört wird, ohne daß join() zuerst aufgerufen wurde, wird der Ausführungs-Thread fortgesetzt, bis seine Anfangsfunktion abgeschlossen ist.
bearbeiten: Wenn Sie nur einen Thread starten müssen und nie join
aufrufen, können Sie den Thread-Konstruktor als Funktion verwenden:
// Launch thread.
boost::thread(&do_work);
Allerdings tun schlage ich nicht, dass Sie das tun, , selbst wenn Sie glauben, dass der Thread abgeschlossen ist, bevor main()
funktioniert.
Warum dynamisch den Thread erstellen? –
@Martin York: Weil ich will nicht Thread-Objekt zerstört werden, nachdem der Gültigkeitsbereich der Variablen verlassen. – itsvetkov
Aber wenn Sie es einfach außerhalb des Gültigkeitsbereichs fallen lassen, können Sie nicht darauf zugreifen (und somit leckt es). Da man keine Zugriffe auf Mittel hat, kann man nichts damit anfangen und der eigentliche Thread der Ausführung ist sowieso noch am Leben, also scheint es sinnlos. Hinweis: Sie sollten praktisch ** NIEMALS einen solchen RAW-Zeiger haben. –