MATLAB Answers

Using timer, How can I cleanly exit a function execution, when the timer fires in MATLAB?

43 views (last 30 days)
My problem is that I can't find a Function to callback as a 'TimerFcn', that cleanly exits my function without errors.
t = timer('StartDelay',2,'TimerFcn', );
Thanks in advance.
  2 Comments
taima zoabi
taima zoabi on 13 Dec 2019
For Example::
function [i] = Example()
t = timer('ExecutionMode','singleShot','StartDelay',2,'TimerFcn',...
@(~,~)Command_that_exits_the_Function);
start(t)
for i=1:1000
i=i+1;
disp(i)
end
end
In this case scenario what can I use as ''Command_that_exits_the_Function'', works for me too if you have some other way to stop and exit my function when the timer fires, other than using the a callback function as 'TimerFcn'.
thank you.

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 13 Dec 2019
Edited: Walter Roberson on 21 Dec 2019
There are only four ways in MATLAB to force a function to stop executing without its cooperation:
  1. quit MATLAB
  2. force an out-of-memory error
  3. force an infinite recursion
  4. Use jave robot or similar to simulate pressing control-C in the command line (note: this might not terminate immediately
There is no way to send a signal to a particular function to force that one function to stop, and there is no way to send a signal to a particular function to force that one function to error().
Therefore what you should do is write your timer to set a flag in an area that the other code checks periodically.
  4 Comments
Walter Roberson
Walter Roberson on 3 Mar 2021
I just tried in R2020b, and found that MATLAB:pmaxsize (too much memory) and MATLAB:lang:StackOverflow (too many levels of recursion) can both be caught. However, it would be worth testing out what happens when the problem is triggered in a callback that is not really part of the code being executed.

Sign in to comment.

More Answers (1)

Sean de Wolski
Sean de Wolski on 13 Dec 2019
Why use a timer for this?
In the start of your function, start a tic
t = tic
Then periodically check
if toc(t)>2
return
end
  1 Comment
taima zoabi
taima zoabi on 13 Dec 2019
Thank you, but I need it to exit exactly after a certain amount of time.
I didn't want to complicate things before, But what I am realy trying to do is to display images in a figure window for 30 seconds, where the image displayed changes when the user pushes the button. And after the 30 seconds are over, I want the function to exit.
So my code is:
%%%
function [] = StartTask3(Task3Time,Task3_IMG,No_of_images)
%Manual
Images_order = randperm(No_of_images);
t = timer('ExecutionMode','singleShot','StartDelay',30,'TimerFcn',...
@(~,~)Command_that_exits_the_Function);
start(t)
for i=1:40
image(eval(['Task3_IMGS.im' num2str(Images_order(i)) ';' ]));
set(gca, 'XTick', [], 'YTick', []);
w = waitforbuttonpress;
end
end
%%%

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!