我是靠谱客的博主 甜美星月,最近开发中收集的这篇文章主要介绍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型时间转换成文字,读取秒后再转换成数值。

最后

以上就是甜美星月为你收集整理的Matlab——Timer对象(多线程编程)计时器的全部内容,希望文章能够帮你解决Matlab——Timer对象(多线程编程)计时器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部