我面临一些关于助推中断的问题。在MAC环境中,即使在设置中断和使用中断点之后,我也没有得到boost_interrupted异常。
//Class Dummy
class A
{
public:
// thread function
void thread_func();
// other code
boost::shared_ptr<boost::thread> mThread;
}
//Some function called from the main thread
void A::Some_Function()
{
// creating the thread
mThread.reset(new boost::thread(boost::bind(&A::thread_func, this)));
// some other code
}
void A::thread_func()
{
try
{
While( something )
{
//Setting the interruption point
// error : interruption exception never caught
//interruption_enable : coming to false
//interruption_request: true ( after setting the interrupt )
boost::this_thread::interruption_point();
// some code
}
}
// error : interruption exception never caught
catch(boost_interrupted* excep)
{
// some handling
}
}
A::~A()
{
if( mThread.get() )
{
mThread->interrupt();
// even after setting the interrupt, the interrupted exception is not caught
mThread->join();
}
mThread.reset();
}
即使在对象的析构函数中设置了中断之后,在thread_func()的中断点,也不会抛出异常。 令人震惊的是,线程是在interruption_enable设置为“false”的情况下创建的。
在调用中断后,在中断点(在线程函数内),interruption_enable为false,interruption_requested为true。由于interruption_enable为false,因此不会抛出异常。 我没有使用任何disable_interruption,那么为什么在interruption_enable设置为false的情况下创建它?有人可以帮我弄清楚这种不寻常的行为吗?而且对我来说问题只出在MAC环境中。