【问题标题】:How a progressbar should be correctly updated within a nested loop in C++?如何在 C++ 的嵌套循环中正确更新进度条?
【发布时间】:2012-05-03 06:42:26
【问题描述】:

我使用 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()“code sn-ps”。我应该如何修改代码以使用并发运行时技术实现内部循环的单个进度条的想法。

【问题讨论】:

  • 为什么要显示最小值而不是3的平均值?
  • 我想知道100%的进度意味着所有的任务都完成了
  • 在这种情况下,您可能需要一个从 0 到 m_Iterations*3 的进度条,并显示所有引擎完成的迭代总和。
  • 哦,你是对的。那么,我必须使用 Concurrency::critical_section 来更新进度条吗?

标签: c++ progress-bar parallel-processing nested-loops ppl


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 2014-05-26
    相关资源
    最近更新 更多