Matlab——Timer对象(多线程编程)计时器

Timer对象和 Dynamic关于Timer的教程。

相信大家对Timer对象的各个属性和其字段有一定了解,更多的信息可在帮助文件中获得。
这里再总结一下,仔细看Timer对象的句柄我们可以发现,Timer其实由两部分构成:
(一)对象本身的一些属性,如ExecutionMode等
(二)回调函数(Call Back Function)

对于第一点,Timer对象实质上与结构体一样,只需要掌握每个属性及其字段名即可。
可见Timer实现相关功能主要集中在回调函数上。那么与普通函数相比,回调函数有哪些不同呢?

1.有默认的入参obj和event。这一点一定要注意,在编写回调参数时一定要在函数名末尾加(obj,event),否则出错。
2.当有其他入参时,函数调用形式发生变化,需写在同一元胞数组中。
这两点详见Dynamic帖子第三部分,这里仅仅予以强调。

接下来我将试图以一个例子,用最最直白的语言告诉大家,尼玛,这玩意到底怎么用。

这是一个画圆的脚本:

alpha=0:pi/20:2*pi;%角度[0,2*pi]
R=2;%半径
x=R*cos(alpha);
y=R*sin(alpha);
plot(x,y,'o-') %画图
axis equal %平衡坐标轴

那么如果我想做一个动画,让这个圆每隔一段时间画一点点,应该怎么画呢?
这无疑要用到多线程控制。及我们介绍的Timer 对象。

首先将上述脚本改编成回调函数TimeFcn:(本例中取名为CircleTask)

function CircleTask(obj,event)
event_time = datestr(event.Data.time);   %使用event对象的data的time属性获得系统当前时间,并转换成字符串
d=event_time(19:20);   %由于本身保存的是年月日小时分钟秒,但我只需要秒的数据,因此单独取出
d=str2double(d); %将字符串转换成数字
alpha=0:pi/20:pi/20*d;%角度[0,2*pi]
ud=obj.UserData;  %使用obj对象的UserData属性传参
R=ud;%半径
x=R*cos(alpha);
y=R*sin(alpha);
plot(x,y,'o-')
axis equal

以上就是整个回调函数,将其保存并添加路径。

Timer对象的调用脚本为:

t=timer('Name','CircleTimer',...
'TimerFcn',@CircleTask,...
'Period',1,...
'ExecutionMode','fixedspacing');
%本句解释成中文就是:
%t= timer(计时器名字是啥?,叫CircleTimer,要输入的TimerFcn回调函数是啥? ,
%用CircleTask这个函数,每次隔多久运行?,一秒,
%执行时间间隔的模式是什么?,上次执行完毕到这次执行计时);
ud=3;
t.UserData=ud;
start(t);

以上代码全部复制黏贴进command window按回车即可

结束时运行:
stop(t);

在这里我想说明我回调函数前四步为何那么麻烦:
由于matlab本身保存的double型时间包含年月日小时分钟秒这些信息,而我需要的仅仅是“秒”这一信息,因此不得不先将matlab的double型时间转换成文字,读取秒后再转换成数值。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打工人_cc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值