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

时间:2014-01-05 19:42:27

标签: c++ multithreading boost

我有下面的代码,它是新线程的开头。 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.";
    }
}

1 个答案:

答案 0 :(得分:0)

您可以通过boost::thread_interrupted重新抛出函数捕获站点

轻松完成此操作
try
{
    // data processing
}
catch(const boost::thread_interrupted &)
{
    throw;
}
catch(...)
{
    // exceptions suppression
}

但我认为处理每个函数中的所有异常并不是一个好主意。更好的方法是只处理特定的异常,允许其他人进一步传播到顶级函数,在那里它们将被处理。

也许此site对您有用