如何在没有默认中断点的情况下构建 boost.thread。我认为我的应用程序在预定义的中断点崩溃。我正在使用带有 msvc10 的 boost 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,并且该类正在轮询另一个线程。但有时我在 catch (...) 中的 ICanThrow 中发现了一个异常。我不知道为什么会这样。但总是从 poll() 线程发生。
现在我想尝试在没有 DONT_PROVIDE_INTERRUPTIONS 的情况下构建 Boost。有人有什么建议吗?