使用方法
具体参考官方文档:
四种定时模式:
-
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
评论(0)
您还未登录,请登录后发表或查看评论