繁体   English   中英

捕获Boost线程中断和退出线程的正确方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM