Febird's Sky

Search & Research & Find
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Matlab中Timer的使用

Posted on 2008-12-20 23:31  febird  阅读(8065)  评论(1编辑  收藏  举报

  鉴于Matlab中缺乏多线程机制,使用Timer无疑是一个很重要的工具,Matlab中Timer是一个Java对象。
 
   Timer的定义

   t=timer();

   设置属性:

  eg.   set(t,'Name','your_timer_name');

  当然可以一次性设置完成:

  例如:

    TaskTimer=timer(...
    'Name','FebirdTimer',...
    'TimerFcn',@ExecuteTask,...
    'ErrorFcn',@ExecuteError,...
    'Period',1,...
    'ExecutionMode','fixedrate');  

  这里TimerFcn为Timer执行的函数,后面的 ‘@ExcuteTask’ 就是你定义的函数名
 同样 ErrorFcn也是一样。

  Period为执行周期,ExecutionMode为执行模式,fixedrate为固定频率。当然前面所说的都是在这个前提之上。

  关于TimerFcn的定义


  当以TimerFcn的定义默认必须有两个参数

  function ExcuteTask(obj,eventdata)
   % TODO
  end

  其中obj为执行该函数所对应的timer对象,eventdata为事件数据,一般里面为具体时间。

 当需要在ExcuteTask中传入参数的时候,那么Timer可以这样定义:

 set(t,'TimerFcn',{@ExecuteTask,var1});

 那么这时函数定义应该为:

 function ExcuteTask(obj,eventdata,var1)
   % TODO
 end

  其他函数的定义也类似。

  关于UserData



  UserData在Timer比较有用,因为当时用上面的方法传递参数是,Matlab只会在第一次传入参数。

  所以我们可以在UserData这个域中保存我们的数据

  例如
 
  t=[0]
  lh=plot(t,sin(t),'-');

   t=timer(...

   'Name','FebirdTimer',...

   'TimerFcn',@ExecuteTask,...

   'ErrorFcn',@ExecuteError,...

   'Period',1,...

   'ExecutionMode','fixedrate');

   ud=struct{'linehanle',lh,'count',0} ;

   set(t,'UserData',ud);


  function ExcuteTask(obj,eventdata)

    ud=obj.UserData;
    l=ud.linehandle;
    c=ud.count;
    t=get(l,'XData');
    y=get(l,'YData');
    t=[t count];
    y=[y sin(0.1*count)];
    set(lh,'XData',t,'YData',y);

   drawnow

   ud.count=ud.count+1;
   set(obj,'UserData',ud);


  end

以上给出了一个使用Timer画图的方法 

关于Timer的函数


 1.start();
 2.stop();
 3.timerfind();

 eg.删除所有的timer
 ts=timerfind;
 if length(ts)>0
 stop(ts);
 delete(ts);
 end

 通过Name查找特定的Timer:

 t=timerfind('Name','FebirdTimer');