使用MATLAB类的成员方法作为计时器

时间:2016-10-19 18:51:21

标签: matlab oop timer

我想实现一个包含一个函数的类,该函数将由在构造函数中启动的计时器调用。

出现两个问题:

首先,我不知道如何在课堂上停止计时器。我写了一个静态函数来停止计时器和非静态函数,它们都不起作用。

其次,我想在计时器调用的成员函数中使用类的成员变量。但是,我可以使用它们但不能改变它们。 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

1 个答案:

答案 0 :(得分:1)

您遇到的两个问题都是因为默认情况下matlab类是值类。为了使属性更改保持不变,您可以通过继承类定义中的句柄使其成为句柄类:

classdef MyPlottingClass < handle