我编写了这段代码来捕获 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_)
- 检查抛出的异常是否实际上源自
std::exception
。 - PPL 仅允许在所有线程完成后传播异常,是否有一个线程仍在运行以防止您看到异常?
出于调试目的,您可以添加额外的 catch block :
catch(...)
{
cout << "Unknown exception" << endl;
}
只是为了检查是否抛出任何类型的异常,但是我不会将其留在生产代码中,因为没有办法对异常进行有效的处理。
关于C++ catch PPLparallel_for引发的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12690330/