デフォルトの中断ポイントなしで boost.thread をビルドするにはどうすればよいですか。事前定義された中断ポイントでアプリケーションがクラッシュしたと思います。msvc10 でブースト 1.53.0 を使用しています
私は次のコードを持っています
class IOController {
public:
IOController() { mThread = boost::thread( boost::bind( &IOController::poll, this ) ); }
~IOController() {mThread.interrupt(); mThread.join() }
void doA() { boost::lock_guard<boost::mutex> lock( mMutex); }
private:
void ICanThrow()
{
try
{
boost::lock_guard<boost::mutex> lock( mMutex);
callFunctionWithSleepFor(); // calling function that can throw and use boost::sleep_for
}
catch( boost::system_error&) {}
catch( std::exception& ) {}
catch ( ... ) { /* APPLICATION CRASH. */ }
}
// this is a thread: mThread = boost::thread(&IOController::poll, this) on ctor
void poll()
{
while(true)
{
callFunctionWithSleepFor( );
this_thread::sleep_for( some_time );
}
}
boost::mutex mMutex;
boost::thread mThread;
};
今、私は非常に集中的な方法でdoAを呼び出しているメインスレッドを呼び出しており、クラスは別のスレッドでポーリングしています。しかし、キャッチで ICanThrow で例外をキャッチすることがあります (...)。なぜこれが起こるのか分かりません。ただし、常に poll() スレッドから発生します。
ここで、DONT_PROVIDE_INTERRUPTIONS なしで Boost をビルドしてみます。誰かに提案がありますか?