使用openmp并行化中止线程

sesse 发布于 2019-03-09 c++ 最后更新 2019-03-09 14:35 6 浏览

我遇到了一个奇怪但可以理解的错误解决方案,但我无法自己弄清楚。我正在创建线程System::Threading::Thread来运行这样的函数:

try
{
   perform_adapt_rgb(alg);
   Control::Invoke(adpt_deg2);
}
   catch ( ThreadAbortException^ e ) 
{
   Control::Invoke(adpt_deg2);
   //Thread::ResetAbort();
}   
我没有粘贴整个事情,因为使它变得复杂是没有意义的。调用更新我的UI .. void perform_adapt_rgb(int alg);函数封装OMP循环,我试图通过线程 - > Abort()从UI中终止进程。功能。在visual studio内测试一切正常,但如果从exe文件执行,它显示应用程序没有响应 - >等待解决方案,关闭对话框。现在我的猜测是,迫使OMP-ed for循环意外结束是导致问题的原因,但是我不完全确定,因为它在VS中可以调试它。没有OMP,一切正常。有人能指出我的解决方法吗?
已邀请:

baut

赞同来自:

好的,我把它整理出来了。它可能不是最好的解决方案,但它可以工作,所以它对我来说无关紧要。我现在所做的是打破长周期的OMP循环到部分,检查一些全局bool,看看我是否需要打破这个功能。比我简单地执行线程自杀...在评估结束时从内部调用abort而不是从UI中止它。我保持开放,以防某人有更好的解决方案。