同期をほとんど必要とせずに複数のワーカー スレッドを起動するコンソール アプリケーションがあります。スレッドの 1 つに例外がある場合、boost::copy_exception
それをメイン スレッドに返すために使用しています。しかし、ワーカー スレッド エラーを検出した後、メイン スレッドでアプリケーションを終了すると (boost::rethrow_exception
または を使用)、次のようになります。exit(1)
"pure virtual function called."
他のワーカー スレッドはまださまざまな時点で実行されており、それらが依存するオブジェクトの一部は、ワーカー スレッドが終了する前にメイン スレッドによって (部分的に?) 破棄されているようです。デバッガをアタッチすると当然起こらないので、ちょっと推測しています。
これを回避するために、できれば膨大な数の中断ポイントを追加せずに、すべてのスレッドを同時に強制終了するにはどうすればよいですか? または、エラーを完全に誤解している可能性があります...
Windows 7 64 ビットで MSVC 9 を使用しています。