计时器
计划执行MATLAB命令
描述
使用一个计时器
调度由MATLAB组成的任务的一个或多个执行®回调函数。如果一个定时器被安排多次执行,您可以通过调整定时器的属性来指定执行之间的时间以及如何处理队列冲突。
的计时器
对象使用回调函数执行命令。回调函数在某个事件期间执行代码,在的情况下经过时间计时器
.为计时器
对象时,可以将回调函数指定为函数句柄或字符向量。如果回调函数是字符向量,MATLAB将其作为可执行代码计算。计时器对象在计时器启动时支持回调函金宝app数(StartFcn
),执行(TimerFcn
),停止(StopFcn
),或遇到错误(ErrorFcn
).有关回调函数的详细信息,请参见定时器回调函数.
创建
属性
回调函数属性
TimerFcn
- - - - - -定时器回调函数
特征向量|字符串标量|函数处理|单元阵列
定时器回调函数,指定为字符向量、字符串标量、函数句柄或单元格数组。在启动计时器之前,必须定义此属性。
如果使用函数句柄指定此属性,则当MATLAB执行回调时,它将传递
计时器
对象和回调函数的事件结构。事件结构中包含事件的类型类型
字段和事件的时间数据
字段。如果通过使用字符向量或字符串标量指定此属性,则当MATLAB执行回调时,它会计算字符向量中包含的MATLAB代码。不建议将回调定义为字符向量。使用指定为函数句柄的函数使MATLAB能够向回调函数提供重要信息。
参数之外,如果回调函数接受参数
计时器
对象和事件数据时,将此属性指定为包含函数句柄和附加参数的单元格数组。
有关更多信息,请参见定时器回调函数.
例子:t = timer('TimerFcn',"MyTimerFunction(Input);")
StartFcn
- - - - - -定时器启动回调函数
特征向量|字符串标量|函数处理|单元阵列
定时器启动回调函数,指定为字符向量、字符串标量、函数句柄或单元格数组。
如果使用函数句柄指定此属性,则当MATLAB执行回调时,它将传递
计时器
对象和回调函数的事件结构。事件结构中包含事件的类型类型
字段和事件的时间数据
字段。如果通过使用字符向量或字符串标量指定此属性,则当MATLAB执行回调时,它会计算字符向量中包含的MATLAB代码。不建议将回调定义为字符向量。使用指定为函数句柄的函数使MATLAB能够向回调函数提供重要信息。
参数之外,如果回调函数接受参数
计时器
对象和事件数据时,将此属性指定为包含函数句柄和附加参数的单元格数组。
有关更多信息,请参见定时器回调函数.
例子:t = timer('StartFcn',@MyStartFunction(~,~))
StopFcn
- - - - - -定时器停止回调函数
特征向量|字符串标量|函数处理|单元阵列
计时器停止回调函数,指定为字符矢量、字符串标量、函数句柄或单元格数组。
计时器停止时:
你调用计时器
停止
方法。计时器完成执行
TimerFcn
.换句话说,的值TasksExecuted
达到所设定的极限TasksToExecute
.出现错误。的
ErrorFcn
回调函数先被调用,然后是StopFcn
回调。
你可以使用StopFcn
定义清除操作,例如从内存中删除计时器对象。
如果使用函数句柄指定此属性,则当MATLAB执行回调时,它将传递
计时器
对象和回调函数的事件结构。事件结构中包含事件的类型类型
字段和事件的时间数据
字段。如果通过使用字符向量或字符串标量指定此属性,则当MATLAB执行回调时,它会计算字符向量中包含的MATLAB代码。不建议将回调定义为字符向量。使用指定为函数句柄的函数使MATLAB能够向回调函数提供重要信息。
参数之外,如果回调函数接受参数
计时器
对象和事件数据时,将此属性指定为包含函数句柄和附加参数的单元格数组。
有关更多信息,请参见定时器回调函数.
例子:t = timer('StopFcn',@MyStopFunction(~,~))
ErrorFcn
- - - - - -定时器错误回调函数
特征向量|字符串标量|函数处理|单元阵列
计时器错误回调函数,指定为字符向量、字符串标量、函数句柄或单元格数组。如果出现错误,则执行此函数,然后调用StopFcn
.
如果使用字符向量或字符串标量指定此属性,则当MATLAB执行回调时,它会计算字符向量中包含的MATLAB代码。
如果使用函数句柄指定此属性,则当MATLAB执行回调时,它将传递
计时器
对象和回调函数的事件结构。事件结构中包含事件的类型类型
字段和事件的时间数据
字段。参数之外,如果回调函数接受参数
计时器
对象和事件数据时,将此属性指定为包含函数句柄和附加参数的单元格数组。
有关更多信息,请参见定时器回调函数.
例子:t = timer('ErrorFcn','disp("An error has happened ")')
时间属性
期
- - - - - -执行之间的延迟
1(默认)|数字标量
执行之间的延迟,以秒为单位指定为大于0.001的数字。用于使用的计时器期
,您必须设置ExecutionMode
而且TasksToExecute
调度多个计时器对象回调事件。
例子:t = timer('Period',5)
StartDelay
- - - - - -定时器开始和第一次执行之间的延迟
0(默认)|数字标量
计时器开始和第一次执行之间的延迟,以秒为单位指定为大于或等于0的数字。当Running = 'on'
,StartDelay
只读。
例子:t = timer('StartDelay',2)
TasksToExecute
- - - - - -执行Times定时器回调函数
数字标量
执行定时器回调函数,指定为大于0的数字。使用TasksToExecute
属性设置执行次数。使用TasksToExecute
,您必须设置ExecutionMode
调度多个定时器回调事件。改变TasksToExecute
计时器运行时可能不会立即生效,这取决于计时器队列的状态。有关计时器队列的详细信息,请参见定时器队列冲突处理.
例子:t = timer('TasksToExecute',5)
BusyMode
- - - - - -定时器函数回调排队
“下降”
(默认)|“错误”
|“队列”
定时器函数回调队列,指定为表中的值之一。使用此属性可指定必须执行计时器时所采取的操作TimerFcn
在前一次执行完成之前TimerFcn
.当运行
属性设置为“上”
,BusyMode
属性为只读。
的BusyMode
属性仅当ExecutionMode
属性设置为FixedRate
.对于其他值ExecutionMode
,不能有重复尝试执行计时器回调函数,因为执行之间的延迟总是相对于前一次执行的完成。
|
队列为空时的行为 |
队列不为空时的行为 |
笔记 |
---|---|---|---|
|
将任务添加到队列 |
放弃任务 |
可能跳过 |
|
将任务添加到队列 |
完成任务;指定的抛出错误 |
完成当前正在执行的任务后停止计时器 |
|
将任务添加到队列 |
等待队列清空,然后在队列中输入任务 |
调整 |
看到定时器队列冲突处理获取更多信息。
例子:t = timer('BusyMode','error')
ExecutionMode
- - - - - -定时器函数回调调度
“singleShot”
(默认)|“fixedRate”
|“fixedDelay”
|“fixedSpacing”
定时器函数回调调度,指定为表中的值之一。当运行= '在'
,ExecutionMode
是只读的。下表总结了执行模式。
执行模式 |
时间 |
---|---|
|
定时器回调函数只执行一次。因此, |
|
定时器回调函数添加到MATLAB执行队列后立即启动。 |
|
当计时器函数回调在MATLAB执行队列中的延迟导致的时间延迟后重新启动执行时启动。 |
|
当计时器回调函数执行完成时开始。 |
“singleShot”
的单一执行模式是计时器
类,且为默认值。“fixedDelay”
,“fixedRate”
,“fixedSpacing”
是三种受支持的多执行模式。金宝app的起始点期
财产。的期
属性指定两次执行之间的时间间隔,该时间保持不变。只有开始执行的时间点不同。
例子:t = timer('ExecutionMode','fixedDelay')
标签属性
名字
- - - - - -计时器的名字
“timer-i”
(默认)|特征向量|字符串标量
计时器名称,指定为字符向量或字符串标量。
默认为的定时器,
我
'
,在那里我
是否有数字表示我
定时器对象创建了这个会话。
例子:t = timer('Name','MyTimer')
标签
- - - - - -对象的标签
特征向量|字符串标量
对象标签,指定为字符向量或字符串标量。
例子:t = timer('Tag','TimerTag')
ObjectVisibility
- - - - - -对象的可见性
“上”
(默认)|“关闭”
对象可见性,指定为“上”
或“关闭”
,这为您提供了一种阻止最终用户访问应用程序创建的计时器对象的方法。的timerfind
函数不返回一个对象ObjectVisibility
属性设置为“关闭”
.不可见的对象仍然有效。要检索内存中所有计时器对象的列表,包括不可见的对象,请使用timerfindall
函数。
例子:t = timer('ObjectVisibility','off')
用户数据
- - - - - -用户数据字段
任何有效的MATLAB数据类型
用于要添加到对象的数据的通用字段。
例子:t = timer('UserData',"This is my first timer!")
只读属性
AveragePeriod
- - - - - -平均执行间隔时间
数字标量
执行之间的平均时间,以秒为单位指定为数值标量。值是南
直到定时器执行两次定时器回调。
InstantPeriod
- - - - - -最后两次处决的间隔时间
南
(默认)|数字标量
最后两次执行之间的时间,以秒为单位指定为数值标量。值是南
直到定时器执行两次定时器回调。
运行
- - - - - -主动执行回调函数的指示器
“关闭”
|“上”
主动执行回调函数的指示器,指定为“关闭”
或“上”
.
TasksExecuted
- - - - - -定时器执行的次数
数字标量
计时器已执行的次数,指定为数值标量。
类型
- - - - - -对象类型
“定时器”
(默认)
标识对象类型的字符向量。
对象的功能
例子
在时间延迟后显示消息
使用定时器对象在3秒的时间延迟后显示消息。
创建一个计时器
对象。属性指定要显示的消息TimerFcn
财产。属性指定3秒的时间延迟StartDelay
属性改为3。
T =定时器;t.StartDelay = 3;t.TimerFcn = @(~,~)“3秒过去了”);
启动计时器。
开始(t)
3秒钟后,显示该消息。
3秒过去了
多次执行回调函数
显示日期和时间时,计时器开始和再次2秒后,当计时器停止。
属性显示计时器开始时的日期和时间StartFcn
属性设置为回调函数。回调函数的前两个参数是计时器
对象的事件结构类型
而且数据
字段。属性来显示计时器停止时的日期和时间StopFcn
财产。
T =定时器;t.StartFcn = @(~,thisEvent)disp([thisEvent.]类型“执行”...datestr (thisEvent.Data.time“dd-mmm-yyyy HH: MM: SS。FFF“)));t.StopFcn = @(~,thisEvent)disp([thisEvent.]类型“执行”...datestr (thisEvent.Data.time“dd-mmm-yyyy HH: MM: SS。FFF“)));t.周期= 2;开始(t)
StartFcn executed 14-Jan-2020 09:08:50.865 StopFcn executed 14-Jan-2020 09:08:52.869
在执行期间显示三次日期和时间,消息之间有两秒钟的暂停。属性指定要显示的消息TimerFcn
财产。命令指示显示消息的次数和每条消息之间的延迟TasksToExecute
而且期
属性。ExecutionMode
指定周期计时器从何时开始TimerFcn
被称为。
t.TimerFcn = @(~,thisEvent)disp([thisEvent.]类型“执行”...datestr (thisEvent.Data.time“dd-mmm-yyyy HH: MM: SS。FFF“)));t.TasksToExecute = 3;t.ExecutionMode =“fixedRate”;开始(t)
StartFcn executed 14-Jan-2020 09:08:50.865 TimerFcn executed 14-Jan-2020 09:08:52.865 TimerFcn executed 14-Jan-2020 09:08:54.866 StopFcn executed 14-Jan-2020 09:08:54.869
定义自定义回调函数
创建一个计时器对象提醒,在8小时内每10分钟休息30秒。
创建一个函数createErgoTimer
返回一个计时器
对象。包括三个本地函数,用于指定计时器启动、执行和停止时的任务。
使用StartDelay
使计时器开始,而不指示你立即休息。设置执行模式为“fixedSpacing”
如此......以至于......10
分钟,30.
秒(t.Period
)在a完成后失效TimerFcn
执行。你可以伸展30.
下一场比赛开始前几秒10
分钟的间隔。
函数t = createErgoTimer() t = timer;t.StartFcn = @ergoTimerStart;t.TimerFcn = @takeBreak;t.StopFcn = @ergoTimerCleanup;%休息间隔10分钟+ 30秒休息t.周期= 600+30;%时间到第一次休息t.StartDelay = t.Period-30;% 8小时内休息次数t.TasksToExecute = ceil(8*60^2/t.Period);t.ExecutionMode =“fixedSpacing”;结束
添加与启动计时器相关的本地函数回调。执行的任务StartFcn
显示人体工程学计时器已经开始的消息。默认情况下,计时器
对象将自身和事件数据传递给回调函数。该函数忽略事件数据。
函数ergoTimerStart (mTimer ~) disp (“开始人体工学休息计时器。”+换行符+..."在接下来的8小时内,你会收到通知"+...“每10分钟休息30秒。”)结束
添加一个本地回调函数,该函数显示一条需要休息30秒的消息。
函数takeBreak (mTimer ~) disp (“休息30秒。”)结束
添加一个本地回调函数来处理与停止计时器相关的任务。
函数ergoTimerCleanup (mTimer ~) disp (“停止人体工学休息计时器。”删除(mTimer)结束
删除计时器对象将其从内存中删除。
在命令行中,调用createErgoTimer
函数创建并启动一个计时器。
t = createErgoTimer;开始(t)
开始人体工学休息计时器。在接下来的8个小时里,你会被通知每10分钟休息30秒。
每一个10
分钟,提醒你做一个30.
第二个破发。
休息一下。
你可以让计时器运行到8
数小时或手动停止。的StopFcn
回调包括从内存中删除计时器的任务。
停止(t)
停止人体工学休息计时器。
限制
的
计时器
对象受硬件、操作系统和软件的限制。避免使用计时器
对象用于实时应用程序。如果MATLAB忙于处理另一个任务,计时器回调可能不会执行。使用
等待
不鼓励使用内部计时器回调函数。
提示
要强制执行事件队列中的回调函数,请包含对
drawnow
函数。的drawnow
函数刷新事件队列。
版本历史
R2006a之前介绍
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。