2012-05-03 35 views
-1

我使用MS Visual Studio 2010中,C++,PPL庫用於並行計算和Qt庫。怎樣一個進度應該在C++嵌套循環中正確地更新?

Concurrency::parallel_for (size_t(0), m_Engines.size(), [&](size_t i) 
{ 
    for (size_t j = 1;j <= m_Iterations;j++) 
    { 
     Compute(i);//some time-cosuming thing   
    } 
}); 

讓我們想象我們有3個獨立的引擎,每個引擎都有m_Iterations。 每個發動機的進度條會看起來像:

進步1:||||||||

進步2:|||||

進步3:|||||||||||

我想在單個進度(而不是以上示出)示出了後向進度(其示出了它們之間的最小值):

總進展:|||||

讓我們假設我們有QProgressBar * pProgressbar,CoreApplication::processEvents()「代碼片段」。我應該如何修改代碼,以便使用併發運行時技術來實現內循環的單個進度欄。

+1

爲什麼要顯示最小值而不是3的平均值? –

+0

我想知道100%的進度意味着所有任務已經完成 – ilya

+1

在這種情況下,您可能需要一個從0到m_Iterations * 3的進度條,並顯示所有引擎完成的迭代總和。 – Vlad

回答

1

爲了顯示最少的時間,您可以在函數的側面使用QWaitCondition,或者您可以編寫單獨的函數來通知一個m_Iterations結束。讓我們假設,目前您正在執行3個並行計算引擎,編寫QWaitCondition來表示其他迭代完成他們的工作。