我想要的是如何获取进度数据。无论我喜欢什么,我都可以实现吧台。我正在使用Visual C ++ 2010,所以我可以使用MFC。
现在,我正在编写多线程程序。自VC ++ 2010以来,Microsoft已经提供了PPL lib。并行模式库(PPL)提供了同时执行数据集合工作的算法。实现多线程应用程序很方便,但我遇到进度条问题。
如何设置parallel_invoke的进度条?
演示代码如下:
// parallel-invoke-structure.cpp
// compile with: /EHsc
#include <ppl.h>
#include <string>
#include <iostream>
using namespace concurrency;
using namespace std;
// Returns the result of adding a value to itself.
template <typename T>
T twice(const T& t) {
return t + t;
}
int wmain()
{
// Define several values.
int n = 54;
double d = 5.6;
wstring s = L"Hello";
// Call the twice function on each value concurrently.
parallel_invoke(
[&n] { n = twice(n); },
[&d] { d = twice(d); },
[&s] { s = twice(s); }
);
// Print the values to the console.
wcout << n << L' ' << d << L' ' << s << endl;
}
答案 0 :(得分:0)
也许这不是主题,但我建议您查看Cilk而不是PPL。
以下是a course at MIT(来自Cilk的主要创作者之一),概述了其优缺点和具体用法。它非常容易使用,声称比PPL更高效(如果你担心的话)。
至于你关于进度条的具体问题,提出一个百分比是第一项任务。如果您使用计时器来映射哪些工作会花费您的成本(就时间而言),您可以使用它(通过每个工作人员的回调来注册已完成的工作)来驱动百分比。一旦你的百分比下降,将它连接到一个栏(在shell中)或GUI进度条是微不足道的。
根据工作进程的工作量(它们的粒度),您可能需要考虑instrumentation的不同方法。如果你看一下this wikipedia page,它会勾勒出许多类型的分析(统计,基于事件等)。
最后一点:我发现进度条很难正确。任何人都可以做一个酒吧。但要准确地表明需要多长时间的真实指示,需要深入了解哪些因素会影响您的表现。与任何计算机程序一样,您的性能可以根据您运行的系统(cpu体系结构,IO带宽,网络带宽)而改变。因此,即使你在盒子上可以预测它,你的客户的盒子可能会有很大的不同 - 以至于你的进度条不再能产生良好的适应症。
希望有帮助...