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

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

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.
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.

댓글을 달려면 로그인하십시오.

 채택된 답변

Walter Roberson
Walter Roberson 2019년 12월 13일
편집: Walter Roberson 2019년 12월 21일
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

@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.
Quiting the jvm won't work if you started with -nojvm …
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.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

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

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
%%%

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Startup and Shutdown에 대해 자세히 알아보기

질문:

2019년 12월 13일

댓글:

2021년 3월 3일

Community Treasure Hunt

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

Start Hunting!

Translated by