我正在写的应用程序执行一个长度算法,通常需要几分钟才能完成。在此期间,我想向用户展示一个进度条,该进度条表明算法的完成尽可能精确。进度条设计模式?
算法分为几个步骤,每个步骤都有其自己的典型时间。对于实例 -
- 初始化(500毫秒)
- 读取输入(5秒)
- 步骤1(30秒)
- 步骤2(3分钟)
- 写入输出(7秒)
- 关停(10毫秒)
每个步骤可通过设置第r相当容易地报告其进度比如说[0到150],然后报告它在主循环中完成的值。
我目前设置的是一个嵌套进度监视器的方案,它构成了一种隐式进度报告树。
所有进度监视从一个接口IProgressMonitor
继承:
class IProgressMonitor
{
public:
void setRange(int from, int to) = 0;
void setValue(int v) = 0;
};
树的根是其连接到实际的GUI界面ProgressMonitor:
class GUIBarProgressMonitor : public IProgressMonitor
{
GUIBarProgressMonitor(ProgressBarWidget *);
};
树中的任何其它节点是控制父项进程的一部分的监视器:
class SubProgressMonitor : public IProgressMonitor
{
SubProgressMonitor(IProgressMonitor *parent, int parentFrom, int parentLength)
...
};
A SubProgressMonitor
取得其母公司的范围[parentFrom, parentFrom+parentLength]
的控制权。
使用此方案,我可以根据全局时间中每个步骤的预期相对部分,静态划分顶级进度。然后每个步骤可以进一步细分为碎片等。'
这样做的主要缺点是划分是静态的,并且根据在运行时发现的变量进行修改变得非常痛苦。
所以问题:有没有已知的进度监测设计模式可以解决这个问题?