2

私のコードの簡略版は次のようになります。

class threadCreator
{
   void threadFunction(void){
   // use some private data members and do something.
   }
   void createThread(void){ 
      boost::thread myThread(
                boost::bind(&threadCreator::threadFunction,this));
      myThread.detach();
   }
}

このプログラムは、スレッドで detach メソッドを呼び出しても、スレッドの実行が完了するのを待ってから終了します。クラスを削除して、関数内だけでスレッドを作成すると、これは期待どおりに機能するようです。

オブジェクトがまだメモリに残っていることに関係があると思います。ただし、私は C++ の学習者であり、これを解決する方法がわかりません。

4

1 に答える 1

2

プログラムがスレッド実行の終了を待つためには、このスレッドオブジェクトのどこかに.join()が必要なので、何かが足りないと思います。デフォルトの動作では、スレッドの実行が終了するのを待ちません。

スレッドで.detach()を呼び出す必要はありません。いずれにせよ、スレッドはスコープの最後でオブジェクトスレッドからデタッチされます。

于 2010-08-27T07:31:37.540 に答える