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

조회 수: 26 (최근 30일)
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
Guillaume
Guillaume 2019년 12월 13일
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 2019년 12월 13일
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 Roberson
Walter Roberson 2019년 12월 23일
Quiting the jvm won't work if you started with -nojvm …
Walter Roberson
Walter Roberson 2021년 3월 3일
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개)

Sean de Wolski
Sean de Wolski 2019년 12월 13일
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
taima zoabi
taima zoabi 2019년 12월 13일
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
%%%

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

카테고리

Help CenterFile Exchange에서 Startup and Shutdown에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by