2017-07-03 1 views
-2

私はboost :: threadを使用してファンクタを実行します。オブジェクトのデストラクタがで、がメインスレッドで2回コールされているのがわかります。しかし、時には、私はデストラクタがメインスレッドで1回呼び出され、スレッドで1回呼び出されることがわかります。クラスAはいくつかの複雑なものを行うので、この現象は必ずしも起こらない。誰でもこれがどう起こるか考えていますか?functorを実行するためにboost :: threadを使用しますが、デストラクタが間違って呼び出されます

int main() 
{ 
    A a; // A is a functor 
    boost::thread myThread(a); 
    while (true) 
    { 
     // sleep every second until interruption caught 
    } 
    myThread.interrupt(); 
    myThread.join(); 
} 

ところで、私はboost :: thread myThread(boost :: ref(a))を使用しています。すべてがうまくいくようです。前もって感謝します。

答えて

0

boost::threadは、引数をコピーしてスレッド関数に、または関数オブジェクトのoperator()に渡します。

参照を渡す必要がある場合は、今度はboost::refを使用してください。

関連する問題