C++ catch PPLparallel_for引发的错误

标签 c++ exception parallel-processing try-catch ppl

我编写了这段代码来捕获 ppl 启动的错误

    try
    {
        parallel_for (m_row_start, m_row_end + 1, [&functionEvaluation,varModel_,this](int i)
        {
             // do things
        });
    }
    catch(const std::exception error_)
    {
        QString t(error_.what());
    }



    try
    {
        return functionEvaluation.combine(plus<double>());
    }
    catch(const std::exception error_)
    {
        QString t(error_.what());
    }

没有捕获任何错误,尽管我强烈怀疑它确实引发了异常(更大的 try{}catch(...){} 它捕获了 std::exception,没有明确的信息。

我捕获 ppl 代码中引发的异常的语法正确吗?

最佳答案

您的语法是正确的,尽管您没有理由不能通过引用捕获以避免不必要的异常对象复制:

 catch(const std::exception & error_)
  1. 检查抛出的异常是否实际上源自 std::exception
  2. PPL 仅允许在所有线程完成后传播异常,是否有一个线程仍在运行以防止您看到异常?

出于调试目的,您可以添加额外的 catch block :

catch(...)
{
  cout << "Unknown exception" << endl;
}

只是为了检查是否抛出任何类型的异常,但是我不会将其留在生产代码中,因为没有办法对异常进行有效的处理。

关于C++ catch PPLparallel_for引发的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12690330/

相关文章:

c++ - 删除继承中的内存

c++ - 来自产生垃圾的文件的输入

c# - 修改一个点,UnboundNameException

java - 调用静态方法时是否需要调用单独的方法?

cuda - 使用CUDA时如何测量每个 block 的执行时间?

decltype 中的 C++11 lambda

c++ - 自由落体问题

java - CompletableFuture 吞下异常?

java - 从另一个 java 进程调用 java 使其停止

c++ - 如何优化矩阵乘法 (matmul) 代码以在单个处理器内核上快速运行