Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

How to delete persistent variables in a timer fcn

Asked by Adrian on 23 Sep 2013

Hi all,

I am using 3 persistent variables in a timer callback function. If I close the GUI (CloseRequestFcn) I want to delete the variable so that it is reinitialized if I start the programm again.

Actually I tried

clear timer_callback_fcn;

But that doesn't work. Moreover I tried

clear functions

This is working well but it doesn't seem to be the best way. Any ideas to improve?

Thank you!

2 Comments

Jan Simon on 23 Sep 2013

Please explain "does not work" with any details.

Adrian on 23 Sep 2013

"does not work" means that the values of the variables are not deleted if I restart the timer

Adrian

Products

2 Answers

Answer by Jan Simon on 23 Sep 2013
Accepted answer

Is timer_callback_fcn an M-file, a subfunction or a nested function? You can clear M-files only.

Instead of persistent variables, storing the data in the timer's UserData looks smarter. Then starting teh timer/GUI again, the data are reset automatically.

2 Comments

Adrian on 23 Sep 2013

How can I store it in the timers UserData?

Adrian on 23 Sep 2013

Did it: (This is part of the timer_callback_fcn)

if ~isempty(get(obj, 'UserData'))
    t=get(obj, 'Userdata');
    delete(t.t1);
    delete(t.t2);
    delete(t.tred);
end
t.t1 = text(...);
t.t2 = text(...);  
t.tred = text(...);
set(obj, 'UserData', t);  

Thank you for helping me...!

Jan Simon
Answer by Robert Cumming on 23 Sep 2013

if you want to keep your current methodology you need to add a "clear" option to your timer callback function which gets called when the gui closes.

i.e.

function myTimerCallback ( varargin )
  persistent myTime  
  if isempty ( myTime ); myTime = now(); end  % initialise
  % reset the timer when the function is called with
  %     myTimerCallback ( 'clear' )
  if nargin == 1 && ischar ( varargin{1} )
    if strcmp ( varargin{1}, 'clear' )
      myTime = []  % or however you want to reset.
      return
    end
  end
  % your code goes here
end

The use of persistent variables to store GUI data becomes even more complex if you have more than 1 GUI active at a time..... It is possible, but not easy.

As Jan said it might be easier to store the information in the timer function itself (depends on how you use the callback).

1 Comment

Adrian on 23 Sep 2013

plausible solution, thak you!

But currently I am working with more than 1 GUI. That's why I will try to store it in timers userdata first.

Robert Cumming

Contact us