使用openmp并行化中止线程
问题描述:
我遇到了一个奇怪但可以理解的错误解决方案,但我无法自己弄清楚。我创建线程System::Threading::Thread
这样运行功能:使用openmp并行化中止线程
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,一切正常。有人能指出我的解决方法吗?
答
好吧,我把它整理出来。这可能不是最好的解决方案,但它的工作原理与我无关。我现在所做的就是打破漫长的OMP循环,将其分解为一些全局布尔值,以确定是否需要跳出该函数。比我简单地执行线程自杀......在评估结束时从内部调用中止,而不是从UI中放弃它。如果某人有更好的解决方案,我会保持开放。