Borrar filtros
Borrar filtros

waitbar within a while loop

9 visualizaciones (últimos 30 días)
msh
msh el 14 de Jul. de 2015
Comentada: Brendan Hamm el 11 de En. de 2017
Hi,
I have a code that need to necessary execute a "while" loop. I am wondering how is possible to use a wait bar until this while loop finishes ?
Thanks

Respuestas (2)

Brendan Hamm
Brendan Hamm el 14 de Jul. de 2015
Right from the documentation waitbar :
h = waitbar(0,'Please wait...');
steps = 1000;
for step = 1:steps
% computations take place here
waitbar(step / steps)
end
close(h)
  3 comentarios
Brendan Hamm
Brendan Hamm el 14 de Jul. de 2015
Editada: Brendan Hamm el 14 de Jul. de 2015
Well now that you have changed the question in regards to a while-loop, the answer is that there is now way you can show the progress if you are not sure how many iterations will take place. There are of course exceptions to this depending on the criteria of your while loop. For instance if you are doing something which is converging on every iteration you could use the convergence rate for the waitbar.
David J. Mack
David J. Mack el 11 de En. de 2017
I agree with Brendan. The definition of the while loop is that you do not know how many steps it will take to finish (if you do, you can use a for-loop instead). Therefore, you will not be able to show the progress. Even when using convergence rate as a proxy for the steps, you are misleading the user, as an increase from 0 to 1 % might take MUCH less time than an increase from 98 to 99 %.

Iniciar sesión para comentar.


Chintan Joshi
Chintan Joshi el 11 de En. de 2017
Editada: Chintan Joshi el 11 de En. de 2017
I recently wanted to do it. Here's how I managed it. But you will need a counter. Below K is some vector being updated at each iteration.
c = 0;
h = waitbar(0,'Please wait...');
while c <= length(K)
steps = length(K);
% complex computations taking place! :)
c = c+1;
waitbar(c / steps);
end
close(h);
  2 comentarios
David J. Mack
David J. Mack el 11 de En. de 2017
Not to be picky, but this is just the for-loop mentioned by Brendan dressed in while (ignoring the index initialization error):
h = waitbar(0,'Please wait...');
steps = length(k);
for c = 1:steps
% computations take place here
waitbar(c / steps)
end
close(h)
Brendan Hamm
Brendan Hamm el 11 de En. de 2017
I wouldn't say this is picky. You are educating on the appropriate usage of for loops vs while loops and possibly removing any further confusion. This is simply correct!

Iniciar sesión para comentar.

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by