boost::thread
演算子を使用してオブジェクトを作成し、new
このスレッドが作業を完了するのを待たずに続行します。
void do_work()
{
// perform some i/o work
}
boost::thread *thread = new boost::thread(&do_work);
thread
作業が完了したら削除する必要があると思います。スレッドの終了を明示的に待たずにこれを行う最善の方法は何ですか?
boost::thread
演算子を使用してオブジェクトを作成し、new
このスレッドが作業を完了するのを待たずに続行します。
void do_work()
{
// perform some i/o work
}
boost::thread *thread = new boost::thread(&do_work);
thread
作業が完了したら削除する必要があると思います。スレッドの終了を明示的に待たずにこれを行う最善の方法は何ですか?
オブジェクトのboost::thread
有効期間とネイティブ スレッドの有効期間は無関係です。オブジェクトはboost::thread
いつでも範囲外になる可能性があります。
boost::thread
クラスのドキュメントから
ファイルの存続期間が、ファイルを表す iostream オブジェクトの存続期間と異なる場合があるのと同様に、実行スレッドの存続期間は、実行スレッドを表すスレッド オブジェクトとは異なる場合があります。特に、join() の呼び出し後、スレッド オブジェクトは通常の存続期間が終了するまで存在し続けますが、実行スレッドは存在しなくなります。逆も可能です。join() が最初に呼び出されずにスレッド オブジェクトが破棄された場合、実行スレッドはその最初の関数が完了するまで続行されます。
編集: スレッドを開始する必要があり、呼び出す必要がない場合join
は、スレッドのコンストラクターを関数として使用できます。
// Launch thread.
boost::thread(&do_work);
ただし、スレッドが完了する前に完了すると確信している場合でも、それを行うことはお勧めしませんmain()
。
使用できます
boost::thread t(&do_work);
t.detach();
boost::thread
スレッドが切り離されると、オブジェクトによって所有されなくなります。オブジェクトは破棄でき、スレッドは引き続き実行されます。boost::thread
デストラクタは、オブジェクトが実行中のスレッドを所有している場合にも呼び出すためdetach()
、t
get destroy を許可しても同じ結果になります。
boost :: shared_ptrを使用することをお勧めします。これにより、スレッドオブジェクトをいつ削除するかを気にする必要がなくなります。
boost::shared_ptr<boost::thread> thread(new boost::thread(&do_work));
スレッドの中断を確認する必要があります。
この記事もいいですね。
http://www.boost.org/doc/libs/1_38_0/doc/html/thread/thread_management.html