2016-10-19 3 views
1

Я хотел бы реализовать класс, который содержит функцию, которая будет вызываться таймером, который запускается в конструкторе.Использование метода-члена класса MATLAB как таймера

Два возникают проблемы:

Во-первых, я не знаю, как остановить таймер внутри класса. Я написал статическую функцию, которая останавливает таймер и нестационарную функцию, оба они не работают.

Во-вторых, я хочу использовать переменные-члены класса внутри функции-члена, которая вызывается таймером. Однако я могу использовать их, но не изменять их. Например, я хочу увеличивать его в каждом вызове, он будет увеличиваться в функции, но не записываться в переменную.

classdef MyPlottingClass 
properties 
    n = 0; 
    t; 
end 

methods 

    function obj = MyPlottingClass() 

     obj.n = 10; 
     %initialise timer 
     obj.t= timer('ExecutionMode', 'FixedRate','Period', 0.5, 'TimerFcn', {@obj.ptimer}); 
     obj.t.UserData = 2; 
     figure(1) 
     xlim([0 30]) 
     %start timer 
     start(obj.t) 
    end 

    %Time funciton 
    function [] = ptimer(obj,src, event) 

     src.UserData = src.UserData + 1; 
     obj.n = obj.n + 1; 
     %Test for using a member variable 
     display(obj.n); 

     if(src.UserData == 31) 
      clf 
      xlim([0 30]) 
      hold on 
      src.UserData=1; 
     end 
     figure(1) 
     stem(src.UserData,1) 
     hold on 
    end 
end 

    %stop function 
    methods (Static) 
     function [] = stoptimer(obj) 
     stop(obj.t) 
     end 
    end 
end 
+1

Если вы измените класс размораживание, чтобы наследовать ручку, которая должна решить вашу вторую проблему 'classdef MyPlottingClass Trogdor

+1

Итак, я попробовал: 'X = MyPlottingClass; пауза (5); X.stoptimer' (с stoptimer как нестатический метод), и это сработало для меня – Trogdor

+0

Спасибо, много, это сработало - вы хотели бы опубликовать его как реальный ответ вместо комментария, чтобы я мог его принять? – Kev1n91

ответ

1

Обе проблемы, с которыми вы столкнулись, связаны с тем, что классы Matlab являются классами значений по умолчанию. Для того, чтобы изменения свойств сохраняются, вы можете сделать это класс ручки, унаследовав ручку в определении вашего класса:

classdef MyPlottingClass < handle 
Смежные вопросы