L'application que j'écris effectue un algorithme de longueur qui prend habituellement quelques minutes pour terminer. Pendant ce temps, je voudrais montrer à l'utilisateur une barre de progression qui indique combien de l'algorithme est fait aussi précisément que possible.Modèles de conception de barre de progression?
L'algorithme est divisé en plusieurs étapes, chacune avec son propre timing typique. Par exemple-
-
initialisation
- (500 milli-secondes)
- entrées de lecture (5 sec)
- étape 1 (30 sec)
- étape 2 (3 minutes)
- sorties d'écriture (7 sec)
- arrêt (10 milli-secondes)
Chaque étape peut signaler ses progrès assez facilement en réglant la r ange son travail sur, disons [0 à 150], puis en rapportant la valeur qu'il a complétée dans sa boucle principale.
Ce que j'ai actuellement mis en place est un schéma de moniteurs de progression imbriqués qui forment une sorte de rapport implicite d'arbre de progression.
Tous les moniteurs de progression hériteront d'une interface IProgressMonitor
:
class IProgressMonitor
{
public:
void setRange(int from, int to) = 0;
void setValue(int v) = 0;
};
La racine de l'arbre est le ProgressMonitor qui est connecté à l'interface GUI réelle:
class GUIBarProgressMonitor : public IProgressMonitor
{
GUIBarProgressMonitor(ProgressBarWidget *);
};
Tout autre nœud de l'arbre sont des moniteurs qui prennent le contrôle d'une partie de la progression du parent:
class SubProgressMonitor : public IProgressMonitor
{
SubProgressMonitor(IProgressMonitor *parent, int parentFrom, int parentLength)
...
};
Un SubProgressMonitor
prend le contrôle de la plage [parentFrom, parentFrom+parentLength]
de son parent.
Avec ce schéma, je suis capable de diviser statiquement la progression de niveau supérieur en fonction de la partie relative attendue de chaque étape de la temporisation globale. Chaque étape peut ensuite être subdivisée en plusieurs parties, etc. '
Le principal inconvénient de ceci est que la division est statique et qu'il est difficile d'effectuer des changements en fonction des variables découvertes au moment de l'exécution. Donc, la question: existe-t-il des modèles de conception connus pour la surveillance du progrès qui résolvent ce problème?