2010-04-29 6 views
1

Voici le problème: Je veux afficher une barre de progression (tout comme un texte comme "Restant 35% ...") lors d'une exécution de fonction C++. J'ai fait la première partie qui est la barre de progression mais le problème est comment montrer la barre de progression pendant l'exécution des autres fonctions?montre une barre de progression simple en C++

Je veux juste commencer à montrer la barre lorsque l'exécution entre dans une fonction spécifique et atteindre 100% en quittant la fonction. Comment faire cela en C++? toute suggestion? merci d'avance!

/Niklas

+9

Quelle infrastructure d'interface utilisateur utilisez-vous? Win32? Qt? Une console de texte? –

+0

Je souhaite afficher la barre de progression sous forme de texte dans stdout. quelque chose de lilk: "Fait: =========> 38%" et rien de plus. Mais l'important est de mettre à jour la valeur en pourcentage lors de l'exécution d'une autre fonction. Je veux simplement écrire la sortie d'une fonction dans un fichier et en même temps mettre à jour le pourcentage fait dans stdout. – Niklas

Répondre

2

Utilisez un thread séparé pour mettre à jour la barre de progression. Cela devrait donner des progrès "quasi réels" de votre application.

+6

Bon conseil en général, mauvais conseil pour un programme Windows - un seul thread doit interagir avec l'interface graphique, ou de mauvaises choses se produisent. Faites le contraire, exécutez la fonction dans un thread de travail et laissez le principal fonctionner dans la barre d'état. –

+0

Aucune expérience dans l'espace Win32. Merci de m'avoir signalé. –

+1

"un seul thread doit interagir avec l'interface graphique, ou de mauvaises choses se produisent" -> un bon conseil pour tout programme avec une interface graphique sur n'importe quelle plate-forme. – foxwoods

1

Il y a deux choses à considérer. Tout d'abord, quand mettez-vous à jour votre barre de progression? En général, cela peut être fait en divisant le travail de votre fonction en ticks, puis utilisez un compte de ticks que vous augmentez chaque fois que la fonction a avancé d'un tick. Un exemple serait ceci:

void SomeFunction() { 
    for (int i = 0; i < 1337; i++) { 
     // do important stuff 
     ProgressBar.IncreaseTickCount(); 
    } 
} 

L'appelant aurait alors faire quelque chose comme ceci:

ProgressBar.SetNumberOfTicks(1337); 
SomeFunction(); 

De cette façon, la barre de progression serait en mesure de recalculer sa valeur à chaque itération de la boucle. Comment cela est présenté à l'écran dépend de votre GUI-Framework. Comme il a été suggested by @Amit et les commentaires à sa réponse, vous aurez probablement exécuter la fonction dans un thread de travail, et le thread UI mettra à jour la barre de progression en continu. Dans ce cas, assurez-vous que le compteur de ticks est thread-safe.

0

Une simple barre de progression de style tic de style stdout peut être trouvée dans un seul fichier à ezProgressBar . Vous pouvez envelopper dans un fil si vous le souhaitez. Une caractéristique intéressante est que l'impression est minimale sur une seule ligne, donc les frais généraux sont assez bon marché et vous n'avez pas besoin de jouer à des jeux avec le caractère magique "réinitialiser le curseur au début de la ligne" comme '\ r'.