Sean's pick this week is Display progress, pause or stop a time-consuming loop by Rafael Oliveira.
It is not uncommon to see questions such asking "How do I stop a for or while loop when a user pushes a button?" in MATLAB Answers. There are a few ways to do this, but usually the results involve checking the state of a toggle button or some flag that has been set by a user. Alternatively, one could consider replacing the for or while loop with a timer which is what I typically recommend.
Rafael's stop makes stopping a loop easy and elegant to do.
for ii = 1:100 if ~stop.requested disp(['Still Running, iteration: ' num2str(ii)]) % Computationally expensive operation. fft2(rand(5000)); else % I clicked said stop disp('Stopped') break end drawnow end
Still Running, iteration: 1 Still Running, iteration: 2 Still Running, iteration: 3 Still Running, iteration: 4 Still Running, iteration: 5 Still Running, iteration: 6 Still Running, iteration: 7 Stopped
This utility also allows you to pause and resume elegantly.
How I found it?
I typically find File Exchange submissions either by randomly browsing, needing some piece of functionality, or trying to help someone not reinvent the wheel. However, I came by this one a little differently. Out of curiosity, I wanted to know which File Exchange submissions contain the string "xkcd". This one came up with a nice little easter egg related to a specific comic.
Turning that mode on:
for ii = 0:0.3:1 stop.setStatus('xkcd',ii) drawnow snapnow end
What approaches do you usually take to allow for user interactions with a loop or timer?
Give it a try and let us know what you think here or leave a comment for Rafael.
To leave a comment, please click here to sign in to your MathWorks Account or create a new one.