Я хотел бы реализовать класс, который содержит функцию, которая будет вызываться таймером, который запускается в конструкторе.Использование метода-члена класса 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
Если вы измените класс размораживание, чтобы наследовать ручку, которая должна решить вашу вторую проблему 'classdef MyPlottingClass
Trogdor
Итак, я попробовал: 'X = MyPlottingClass; пауза (5); X.stoptimer' (с stoptimer как нестатический метод), и это сработало для меня – Trogdor
Спасибо, много, это сработало - вы хотели бы опубликовать его как реальный ответ вместо комментария, чтобы я мог его принять? – Kev1n91