我刚看到这个问题及其相关答案。考虑到我以前从未遇到过这种使用throws 的方式,我很惊讶地发现这甚至是可能的。
我没有找到以下问题的简明答案:我有一个生产者 - 消费者线程模型,其中主线程是消费者,而一些工作线程是生产者.生产者线程在应用程序执行期间运行它的线程循环,这是可能的因为它偶尔抛出异常.主线程是UI线程,它应该弹出异常消息,包括来自不同线程的异常消息.如何在主线程中捕获这些异常?
在Windows上使用C++ 0x的boost
WorkerThread.cpp
WorkerThread::WorkerThread(){
m_thread = boost::thread(&WorkerThread::drawThread,this);
}
void WorkerThread::drawThread()
{
while(true)
{
boost::unique_lock<boost::mutex> lock(m_mutex);
try{
///some work is done here...
}catch(std::exception &e){
/// some exception is thrown
/// notify main thread of the exception
}
}
}
Run Code Online (Sandbox Code Playgroud)
需要注意的是,我无法使用try {} catch在主线程中包装WorkerThread,因为它是在某个时刻创建的,从那时起自行运行直到应用程序终止.