提升未在MAC环境中捕获的中断异常

时间:2016-03-01 13:59:29

标签: c++ multithreading boost

我面临一些关于助推中断的问题。在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环境中。

0 个答案:

没有答案