由 PPL parallel_for引发的 C++ 捕获错误
c++ catch error raised by PPL parallel_for
我写了这段代码来捕捉 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 块:
catch(...)
{
cout << "Unknown exception" << endl;
}
只是为了检查您是否抛出任何类型的异常,但是我不会将它留在生产代码中,因为没有办法对异常做任何事情。
首先,检查抛出的内容。如果您输入错误,它将不会做出反应。也许它只是 CONST 标记?常量型与非常量型不同,但我实际上记不太清楚渔获物是否对常量挥发性敏感。
其次,除非有充分的理由出现,否则请始终通过参考来捕获:
catch(std::exception& error)
如果不这样做,则会发生异常复制:http://www.parashift.com/c++-faq/what-to-catch.html 我所说的复制是指对象复制,而不是重新提出;
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 错误:未在此范围内声明'reverse'