使用openmp并行中止线程

Abort thread with openmp parallelization

本文关键字:线程 并行 openmp 使用      更新时间:2023-10-16

我遇到了一个奇怪但可以理解的错误解决方案,我无法自己弄清楚。我正在创建线程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周期,我试图通过线程从UI杀死进程->Abort();函数。在visual studio内测试一切工作正常,但如果从exe文件执行,它显示应用程序没有响应->等待解决方案,关闭对话框。现在我的猜测是,强迫OMP-ed周期意外结束是导致问题的原因,但我不完全确定,因为它确实在VS中工作,我可以调试它。没有OMP一切都很好。谁能告诉我怎么解决这个问题?

好了,伙计们,我整理好了。这可能不是最好的解决方案,但它有效,所以这对我来说不再重要了。我现在所做的是将长周期OMP分解为几个部分,检查一些全局bool,以确定我是否需要跳出函数。然后我简单地执行线程自杀…在求值结束时从线程内部调用abort,而不是从UI调用abort。如果有人有更好的解决办法,我就把它留着。