2012-05-03 1 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   
    } 
}); 

m_Iterationsの3つの独立したエンジンがあるとしましょう。 各エンジンの進捗バーは次のようになります。

進捗状況1:|||||||

進捗状況2:|||||

進捗状況3:|||||||||

総進行:(これらのうち最小値を示す)の後方プログレスバーを示す

そして、私は(代わりに、上に示したの)単一のプログレスバーを有するたい|||||

QProgressBar * pProgressbar,CoreApplication::processEvents()「コードスニペット」があるとします。同時実行ランタイム技術を使用して、内部ループ用の単一のプログレスバーの考え方を実装するには、コードをどのように変更する必要がありますか。

+1

なぜ3の平均値ではなく最小値を表示したいですか? –

+0

100%進捗とは、すべてのタスクが完了したことを意味します。 – ilya

+1

この場合、おそらく0から 'm_Iterations * 3'に進む進捗バーが必要であり、すべてのエンジンで完了した反復の合計を表示する必要があります。 – Vlad

答えて

1

最小時間を表示するには、関数の側でQWaitConditionを使用するか、1つのm_Iterationsフィニッシュに通知する別の関数を記述できます。仮定すると、現在、あなたは3並列計算エンジンを実行している、他の反復が彼らの仕事をすることを知らせるためにQWaitConditionを書く。

関連する問題