使用方法
具体参考官方文档:
传送门1-timer 类传送门2-计时器回调函数传送门3-使用计时器安排命令的执行
四种定时模式:
sigleShot:只执行一次,故Period属性不起作用,其他模式都可以执行多次
fixedDelay:上一次TimerFcn执行完毕时刻到下一次TimerFcn被加入队列时刻之间的间隔
fixedRate:上一次开始执行到下一次被加入队列之间的间隔
fixedSpacing:前后两次被加入到执行语句队列时刻之间的间隔
法1:
timer_id
= timer
;:
timer_id
.StartDelay
= 1.0;
timer_id
.Period
= 1.0;
timer_id
.ExecutionMode
= 'fixedSpacing';
timer_id
.TimerFcn
= @timer_handler
;
start
(timer_id
);
function timer_handler
(~,~)
% user code
end
注意:MATLAB是解释性语言,如果定时器运行中继续启动仿真,会导致同样功能的新定时器启动,且ID号不同属于不同线程!所以重新仿真前应该停止所有定时器并删除!
法2:
t
= timer
('StartDelay',1,'TimerFcn',@t_TimerFcn
,'Period',2,'ExecutionMode','fixedRate');
start
(t
)
function t_TimerFcn
(hObject
,eventdata
)
% user code
end
应用实例
案例1:
% 代码来源:https
://zhuanlan
.zhihu
.com
/p
/136570344
% 启动定时器
clear
all;
clc
;
% 删除现有的定时器,重新创建一个定时器
%stop
(timerfind
);
%delete
(timerfind
);
timer_id
= timer
;
timer_id
.StartDelay
= 1.0;
timer_id
.Period
= 1.0;
% 周期性执行
,fixedSpacing模式
timer_id
.ExecutionMode
= 'fixedSpacing';
timer_id
.TimerFcn
= @timer_handler
;
%启动定时器
start
(timer_id
);
function timer_handler
(~,~)
persistent counter
;
if isempty
(counter
)
counter
= 0;
end
fprintf
(1,'定时器回调=%d\n',counter
);
counter
= counter
+1;
end
案例2:
% 代码来源:https
://blog
.csdn
.net
/superjunenaruto
/article
/details
/54614569
%% 定时器
% 函数说明:(命令行输入)
% t_test:创建一个定时器对象,从
0 开始计数(每
2 秒)
% t_test
('stop'):停止计数,删除定时器
function t_test
(varargin
)
global num num1 num2
if nargin
== 0 % 直接命令行输入 t_test 表示:创建一个定时器对象,开始定时
num
= 0;
num1
= 100;
num2
= 1000;
delete
(timerfind
) % 删除现有的定时器,重新创建一个定时器
t
= timer
('StartDelay',1,'TimerFcn',@t_TimerFcn
,'Period',2,'ExecutionMode','fixedRate');
t1
= timer
('StartDelay',1,'TimerFcn',@t_TimerFcn1
,'Period',2,'ExecutionMode','fixedDelay');
t2
= timer
('StartDelay',1,'TimerFcn',@t_TimerFcn2
,'Period',2,'ExecutionMode','fixedSpacing');
start
([t
,t1
,t2
])
elseif
((nargin
== 1) && strcmp
(varargin
{1},'stop'))
stop
(timerfind
)
delete
(timerfind
)
else
end
end
%% 回调函数
function t_TimerFcn
(hObject
,eventdata
)
global num
disp
(num2str
(num
))
num
= num
+ 1;
end
function t_TimerFcn1
(~,~)
global num1
disp
(num2str
(num1
))
num1
= num1
+ 1;
end
function t_TimerFcn2
(~,~)
global num2
disp
(num2str
(num2
))
num2
= num2
+ 1;
end