2013-04-11 113 views
0

我遇到了一個奇怪但可以理解的錯誤解決方案,但我無法自己弄清楚。我創建線程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,一切正常。有人能指出我的解決方法嗎?

回答

0

好吧,我把它整理出來。這可能不是最好的解決方案,但它的工作原理與我無關。我現在所做的就是打破漫長的OMP循環,將其分解爲一些全局布爾值,以確定是否需要跳出該函數。比我簡單地執行線程自殺......在評估結束時從內部調用中止,而不是從UI中放棄它。如果某人有更好的解決方案,我會保持開放。