如何在C++的嵌套循环中正确更新进度条

How a progressbar should be correctly updated within a nested loop in C++?

本文关键字:更新 C++ 嵌套循环      更新时间:2023-10-16

我使用MS Visual Studio 2010,C++,PPL库进行并行计算和Qt库。

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 * pProgressbarCoreApplication::processEvents()"代码片段"。我应该如何修改代码,以便使用并发运行时技术实现内部循环的单个进度条的想法。

为了显示最短的时间,您可以在函数的侧面使用 QWaitCondition,或者您可以编写单独的函数来通知一个m_Iterations完成。假设,目前您正在执行 3 个并行计算引擎,编写 QWaitCondition 以指示其他迭代完成其工作。