定时器功能强大,本文记录了一个简单使用的案例。
功能描述
点击开始定时,到达既定的时间调用回调函数。
回调函数中将“数值显示”的值加一。
可以手动修改定时器的周期。
UI布局
其中:字符框均为数值框,而不是文本框。
组件名称
实现步骤
1.添加属性
这里我选私有属性
定时器的句柄
properties (Access = private)
Timer_id; % 定时器id
end
2.添加定时器控制函数
这里我选私有函数
methods (Access = private)
% 定时器初始化,重复模式
function timer_init(app)
app.Timer_id = timer;
app.Timer_id.StartDelay = 0.01; % 开启的延时生效时间
app.Timer_id.Period = 1.0;% 周期
app.Timer_id.ExecutionMode = 'fixedSpacing';
app.Timer_id.TimerFcn = @(~, ~) timer_handler(app);
end
% 定时器启动
function timer_start(app)
start(app.Timer_id);
end
% 定时停止
function timer_stop(app)
stop(app.Timer_id);
end
% 删除定时器
function timer_delete(app)
delete(app.Timer_id);
end
%定时器回调
function timer_handler(app)
%执行定时器任务
app.EditField.Value = app.EditField.Value +1;
end
end
一些概念的解释:
- Period
定时器定时的周期。 - StartDelay
开始定时器时与启动倒计时之间的间隔。
举例:StartDelay = 4,Period = 2
start(app.Timer_id);会先等待StartDelay 的4s,然后倒计时Period的2s,再过2s会则会调用TimerFcn 的回调函数进行处理。 - ExecutionMode
指定定时器的触发方式(触发一次,还是循环触发……)总共有四种方式,根据实际需求选择
sigleShot;只执行一次,执行后会自动关闭定时器。其他模式可以循环执行
fixedDelay;上一次TimerFcn执行完毕时刻到下一次TimerFcn被加入队列时刻之间的间隔
fixedRate;上一次开始执行到下一次被加入队列之间的间隔
fixedSpacing: 前后两次被加入到执行语句队列时刻之间的间隔
- delete和修改周期
删除定时器,要在定时器停止后,才能进行删除或修改周期。
3.初始化定时器
右键app.UIFigure添加回调函数
% Code that executes after component creation
function startupFcn(app)
timer_init(app);
end
在软件打开后,会进行定时器的初始化。
4.开始或停止定时器
添加停止按钮的按键回调。(这个按钮使用的是状态按钮)
% Value changed function: Button_Contrl
function Button_ContrlValueChanged(app, event)
value = app.Button_Contrl.Value;
if value == 1
app.Button_Contrl.Text = '停止';
timer_start(app);
else
app.Button_Contrl.Text = '开始';
timer_stop(app);
end
end
5.设置定时器周期
添加对应按钮的回调函数即可,
注意是先停止,才能修改。
% Button pushed function: Button_SetPeriod
function Button_SetPeriodPushed(app, event)
timer_stop(app);
app.Timer_id.Period = app.EditField_PeriodValue.Value;
timer_start(app);
end
添加数值清零的回调函数。
% Button pushed function: Button_Clear
function Button_ClearPushed(app, event)
app.EditField_Show.Value = 0;
end
6.设置软件关闭回调
软件关闭的时候,释放定时器
function UIFigureCloseRequest(app, event)
% 停止定时器,然后删除
timer_stop(app);
timer_delete(app);
delete(app);
end
实验结果
点击开始按钮
点击清零,数据清0.
设置定时周期0.2,数值增加的速度明显变快。
点击停止,定时器停止,数值不再增加。