【问题标题】:Proper way to catch boost thread interrupt and exit thread捕获提升线程中断和退出线程的正确方法
【发布时间】:2014-01-05 19:42:27
【问题描述】:

我有下面的代码,它是一个新线程的开始。 BeginWork 函数通过一系列具有大量异常处理的函数。如果线程组.interrupt_all();调用单个函数将处理中断,这会导致线程保留在其循环中而不会被正确中断。如何更改错误处理以解决此类异常并模仿行为,就好像初始循环的外部 try catch 块捕获了线程中断异常一样?我在想可能会捕捉到时间中断的异常并将一个布尔值设置为真,在主循环中检查它,如果它设置为真则中断。

void ThreadWorker(int intThread)
{
    try
    {
        int X = 0;


        do
        {
            cout << "Thread " << intThread << "\n";
            BeginWork();
        }
        while (true);

    }

    catch(...)
    {
        cout << "Thread: " << intThread << " Interrupted.";
    }
}

【问题讨论】:

    标签: c++ multithreading boost


    【解决方案1】:

    您可以通过 boost::thread_interrupted 在函数捕获站点中重新抛出来轻松地做到这一点

    try
    {
        // data processing
    }
    catch(const boost::thread_interrupted &)
    {
        throw;
    }
    catch(...)
    {
        // exceptions suppression
    }
    

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

    也许这个site 对你有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多