我有下面的代码,它是新线程的开头。 BeginWork函数经历了一系列具有大量异常处理的函数。如果是threadgroup.interrupt_all();调用单个函数将处理中断,这会导致线程保持在其循环中而不会被正确中断。如何更改我的错误处理以解决此类异常并模仿行为,好像初始循环的外部try catch块捕获了线程中断异常?我想也许可以捕获时间中断的异常,并将布尔值设置为true,在主循环中检查,如果设置为true则中断。
void ThreadWorker(int intThread)
{
try
{
int X = 0;
do
{
cout << "Thread " << intThread << "\n";
BeginWork();
}
while (true);
}
catch(...)
{
cout << "Thread: " << intThread << " Interrupted.";
}
}
答案 0 :(得分:0)
您可以通过boost::thread_interrupted
重新抛出函数捕获站点
try
{
// data processing
}
catch(const boost::thread_interrupted &)
{
throw;
}
catch(...)
{
// exceptions suppression
}
但我认为处理每个函数中的所有异常并不是一个好主意。更好的方法是只处理特定的异常,允许其他人进一步传播到顶级函数,在那里它们将被处理。
也许此site对您有用