MATLAB Answers

Adrian
0

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

Please explain "does not work" with any details.

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

Log in to comment.

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

How can I store it in the timers UserData?

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

Log in to comment.


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

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.

Log in to comment.


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

MATLAB Academy

New to MATLAB?

Learn MATLAB today!