[英]Proper way to catch boost thread interrupt and exit thread
我下面的代码是一个新线程的开始。 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.";
}
}
您可以通过在功能捕获站点中将boost::thread_interrupted
重新抛出来轻松完成此操作
try
{
// data processing
}
catch(const boost::thread_interrupted &)
{
throw;
}
catch(...)
{
// exceptions suppression
}
但是我认为在每个函数中处理所有异常不是一个好主意。 更好的方法是仅处理特定的异常,从而允许其他异常进一步传播到将在其中处理的顶级功能。
也许这个网站对您有用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.