我正在编写的应用程序执行长度算法,通常需要几分钟才能完成。在这段时间里,我想向用户展示一个进度条,它指示尽可能精确地完成了多少算法。
该算法分为几个步骤,每个步骤都有自己的典型时序。例如-
通过设置其工作范围,例如 [0 到 150],然后报告它在其主循环中完成的值,每个步骤都可以很容易地报告其进度。
我目前建立的是一个嵌套的进度监视器方案,它形成了一种隐式的进度报告树。
所有进度监视器都继承自一个接口(interface)
IProgressMonitor
:class IProgressMonitor
{
public:
void setRange(int from, int to) = 0;
void setValue(int v) = 0;
};
树的根是 ProgressMonitor,它连接到实际的 GUI 界面:
class GUIBarProgressMonitor : public IProgressMonitor
{
GUIBarProgressMonitor(ProgressBarWidget *);
};
树中的任何其他节点都是监视器,它们控制父进程的一部分:
class SubProgressMonitor : public IProgressMonitor
{
SubProgressMonitor(IProgressMonitor *parent, int parentFrom, int parentLength)
...
};
一个
SubProgressMonitor
控制范围 [parentFrom, parentFrom+parentLength]
它的 parent 。使用这个方案,我可以根据全局时序中每个步骤的预期相对部分静态划分顶级进度。然后可以将每个步骤进一步分割为碎片等'
这样做的主要缺点是除法是静态的,根据运行时发现的变量进行更改会很痛苦。
所以问题是:是否有任何已知的进度监控设计模式可以解决这个问题?
最佳答案
一个非常有趣的方法是用户感知。
Chris Harrison发表了一篇关于用户如何根据进度条报告的进度感知时间流逝的论文(尽管在所有实验中实际持续时间显然是相同的)
请注意,首选显示公式是 (x + (1-x)/2 )8 其中 x
是 0 到 1 的实际进度 :)
因此,我建议:
我知道,这不准确,但如果用户认为它更快,我会接受它!
关于design-patterns - 进度条设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2506550/