我想实现一个包含一个函数的类,该函数将由在构造函数中启动的计时器调用。
出现两个问题:
首先,我不知道如何在课堂上停止计时器。我写了一个静态函数来停止计时器和非静态函数,它们都不起作用。
其次,我想在计时器调用的成员函数中使用类的成员变量。但是,我可以使用它们但不能改变它们。 E.g我想在每次调用中递增它,它会在函数中递增但不会写入变量。
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
答案 0 :(得分:1)
您遇到的两个问题都是因为默认情况下matlab类是值类。为了使属性更改保持不变,您可以通过继承类定义中的句柄使其成为句柄类:
classdef MyPlottingClass < handle