基本的なスレッド管理を学んでいるうちに、これらの行(太字)を本で理解することが困難でした。あなたがスレッドを開始したら実行中のスレッドとスレッドオブジェクトの関係
、あなたは明示的にそれが完了するまで待機する かどうかを決定する必要があります(と結合することによりセクション2.1.2をそれ-参照)または がで(それ自身で実行するためにそれを残しますそれを切り離す - セクション2.1.3を参照)。 std :: threadオブジェクトが破棄される前に決定しないと、 プログラムが終了します(std :: threadデストラクタは std :: terminate()を呼び出します)。したがって、 例外が存在する場合でも、 スレッドが正しく結合または切り離されていることを確認することが不可欠です。このシナリオを扱うテクニックについては、2.1.3節を参照してください。 std :: thread オブジェクトが破棄される前にこの決定を下す必要があることに注意してください。スレッド自体は、結合する前に長い を終了してもよいし、デタッチする前ににしてから スレッドstd :: threadオブジェクトが破棄された後にも長く実行される可能性があります。 スレッドオブジェクトが破壊された後も、スレッドの実行を行い
?誰でもサンプルコードまたはリファレンスを持っていますか?
'{STD ::(SomeLongRunningFunction)番目のスレッド。 th.detach();/* thはここでは破棄されますが、SomeLongRunningFunctionはワーカースレッド上で実行し続けます* /} ' –
デタッチ後、スレッドはstd :: threadオブジェクトとは関係ありません。 – halfelf
ルールは単純です:スレッドは、エントリ関数から戻るか、スレッドが所属する実行可能ファイルが終了するまで常に実行されます。 – Frank