MATLAB Answers

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

18 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

Guillaume
Guillaume on 13 Dec 2019
Can you explain more clearly what you're trying to do exactly, particularly, the order of execution of the various things you want to happen.
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.

  3 Comments

Sean de Wolski
Sean de Wolski on 23 Dec 2019
@Walter, You can also cancel(parfeval Future). Quit and exit aren't fool proof and can pop up a dialog if there's an unsaved file in the editor. Killing the jvm with java.lang.System.exit(0) works reliably.

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.

Sign in to answer this question.