主要内容

计时器

计划执行MATLAB命令

描述

使用一个计时器调度由MATLAB组成的任务的一个或多个执行®回调函数。如果一个定时器被安排多次执行,您可以通过调整定时器的属性来指定执行之间的时间以及如何处理队列冲突。

计时器对象使用回调函数执行命令。回调函数在某个事件期间执行代码,在的情况下经过时间计时器.为计时器对象时,可以将回调函数指定为函数句柄或字符向量。如果回调函数是字符向量,MATLAB将其作为可执行代码计算。计时器对象在计时器启动时支持回调函金宝app数(StartFcn),执行(TimerFcn),停止(StopFcn),或遇到错误(ErrorFcn).有关回调函数的详细信息,请参见定时器回调函数

创建

描述

例子

t=计时器创建一个空计时器对象来调度MATLAB命令的执行。启动定时器之前,必须先设置TimerFcn属性。

一个计时器t具有控制其行为的属性。通过使用访问属性p = t。然后用属性= p.保存和恢复的所有属性t,你可以使用A = get(t)而且设置(t)),分别。

例子

t=计时器(名称,值指定使用一个或多个的其他选项名称-值参数。

属性

全部展开

回调函数属性

定时器回调函数,指定为字符向量、字符串标量、函数句柄或单元格数组。在启动计时器之前,必须定义此属性。

  • 如果使用函数句柄指定此属性,则当MATLAB执行回调时,它将传递计时器对象和回调函数的事件结构。事件结构中包含事件的类型类型字段和事件的时间数据字段。

  • 如果通过使用字符向量或字符串标量指定此属性,则当MATLAB执行回调时,它会计算字符向量中包含的MATLAB代码。不建议将回调定义为字符向量。使用指定为函数句柄的函数使MATLAB能够向回调函数提供重要信息。

  • 参数之外,如果回调函数接受参数计时器对象和事件数据时,将此属性指定为包含函数句柄和附加参数的单元格数组。

有关更多信息,请参见定时器回调函数

例子:t = timer('TimerFcn',"MyTimerFunction(Input);")

定时器启动回调函数,指定为字符向量、字符串标量、函数句柄或单元格数组。

  • 如果使用函数句柄指定此属性,则当MATLAB执行回调时,它将传递计时器对象和回调函数的事件结构。事件结构中包含事件的类型类型字段和事件的时间数据字段。

  • 如果通过使用字符向量或字符串标量指定此属性,则当MATLAB执行回调时,它会计算字符向量中包含的MATLAB代码。不建议将回调定义为字符向量。使用指定为函数句柄的函数使MATLAB能够向回调函数提供重要信息。

  • 参数之外,如果回调函数接受参数计时器对象和事件数据时,将此属性指定为包含函数句柄和附加参数的单元格数组。

有关更多信息,请参见定时器回调函数

例子:t = timer('StartFcn',@MyStartFunction(~,~))

计时器停止回调函数,指定为字符矢量、字符串标量、函数句柄或单元格数组。

计时器停止时:

  • 你调用计时器停止方法。

  • 计时器完成执行TimerFcn.换句话说,的值TasksExecuted达到所设定的极限TasksToExecute

  • 出现错误。的ErrorFcn回调函数先被调用,然后是StopFcn回调。

你可以使用StopFcn定义清除操作,例如从内存中删除计时器对象。

  • 如果使用函数句柄指定此属性,则当MATLAB执行回调时,它将传递计时器对象和回调函数的事件结构。事件结构中包含事件的类型类型字段和事件的时间数据字段。

  • 如果通过使用字符向量或字符串标量指定此属性,则当MATLAB执行回调时,它会计算字符向量中包含的MATLAB代码。不建议将回调定义为字符向量。使用指定为函数句柄的函数使MATLAB能够向回调函数提供重要信息。

  • 参数之外,如果回调函数接受参数计时器对象和事件数据时,将此属性指定为包含函数句柄和附加参数的单元格数组。

有关更多信息,请参见定时器回调函数

例子:t = timer('StopFcn',@MyStopFunction(~,~))

计时器错误回调函数,指定为字符向量、字符串标量、函数句柄或单元格数组。如果出现错误,则执行此函数,然后调用StopFcn

  • 如果使用字符向量或字符串标量指定此属性,则当MATLAB执行回调时,它会计算字符向量中包含的MATLAB代码。

  • 如果使用函数句柄指定此属性,则当MATLAB执行回调时,它将传递计时器对象和回调函数的事件结构。事件结构中包含事件的类型类型字段和事件的时间数据字段。

  • 参数之外,如果回调函数接受参数计时器对象和事件数据时,将此属性指定为包含函数句柄和附加参数的单元格数组。

有关更多信息,请参见定时器回调函数

例子:t = timer('ErrorFcn','disp("An error has happened ")')

时间属性

执行之间的延迟,以秒为单位指定为大于0.001的数字。用于使用的计时器,您必须设置ExecutionMode而且TasksToExecute调度多个计时器对象回调事件。

例子:t = timer('Period',5)

计时器开始和第一次执行之间的延迟,以秒为单位指定为大于或等于0的数字。当Running = 'on'StartDelay只读。

例子:t = timer('StartDelay',2)

执行定时器回调函数,指定为大于0的数字。使用TasksToExecute属性设置执行次数。使用TasksToExecute,您必须设置ExecutionMode调度多个定时器回调事件。改变TasksToExecute计时器运行时可能不会立即生效,这取决于计时器队列的状态。有关计时器队列的详细信息,请参见定时器队列冲突处理

例子:t = timer('TasksToExecute',5)

定时器函数回调队列,指定为表中的值之一。使用此属性可指定必须执行计时器时所采取的操作TimerFcn在前一次执行完成之前TimerFcn.当运行属性设置为“上”BusyMode属性为只读。

BusyMode属性仅当ExecutionMode属性设置为FixedRate.对于其他值ExecutionMode,不能有重复尝试执行计时器回调函数,因为执行之间的延迟总是相对于前一次执行的完成。

BusyMode

队列为空时的行为

队列不为空时的行为

笔记

“下降”

将任务添加到队列

放弃任务

可能跳过TimerFcn调用

“错误”

将任务添加到队列

完成任务;指定的抛出错误ErrorFcn;停止计时器

完成当前正在执行的任务后停止计时器

“队列”

将任务添加到队列

等待队列清空,然后在队列中输入任务

调整属性管理执行队列中的任务

看到定时器队列冲突处理获取更多信息。

例子:t = timer('BusyMode','error')

定时器函数回调调度,指定为表中的值之一。当运行= '在'ExecutionMode是只读的。下表总结了执行模式。

执行模式

时间起点

“singleShot”

定时器回调函数只执行一次。因此,财产没有影响。该模式为系统默认的执行模式。

“fixedRate”

定时器回调函数添加到MATLAB执行队列后立即启动。

“fixedDelay”

当计时器函数回调在MATLAB执行队列中的延迟导致的时间延迟后重新启动执行时启动。

“fixedSpacing”

当计时器回调函数执行完成时开始。

  • “singleShot”的单一执行模式是计时器类,且为默认值。

    'singleShot'执行模式的时序示意图。

  • “fixedDelay”“fixedRate”,“fixedSpacing”是三种受支持的多执行模式。金宝app的起始点财产。的属性指定两次执行之间的时间间隔,该时间保持不变。只有开始执行的时间点不同。

    'fixedDelay'执行模式的时序示意图。

例子:t = timer('ExecutionMode','fixedDelay')

标签属性

计时器名称,指定为字符向量或字符串标量。

默认为的定时器,,在那里是否有数字表示定时器对象创建了这个会话。

例子:t = timer('Name','MyTimer')

对象标签,指定为字符向量或字符串标量。

例子:t = timer('Tag','TimerTag')

对象可见性,指定为“上”“关闭”,这为您提供了一种阻止最终用户访问应用程序创建的计时器对象的方法。的timerfind函数不返回一个对象ObjectVisibility属性设置为“关闭”.不可见的对象仍然有效。要检索内存中所有计时器对象的列表,包括不可见的对象,请使用timerfindall函数。

例子:t = timer('ObjectVisibility','off')

用于要添加到对象的数据的通用字段。

例子:t = timer('UserData',"This is my first timer!")

只读属性

执行之间的平均时间,以秒为单位指定为数值标量。值是直到定时器执行两次定时器回调。

最后两次执行之间的时间,以秒为单位指定为数值标量。值是直到定时器执行两次定时器回调。

主动执行回调函数的指示器,指定为“关闭”“上”

计时器已执行的次数,指定为数值标量。

标识对象类型的字符向量。

对象的功能

删除 删除文件或对象
得到 查询图形对象属性
isvalid 确定有效句柄
设置图形对象属性
开始 启动定时器
startat 计划定时器在指定时间发射
停止 停止计时器
timerfind 查找计时器对象
timerfindall 查找所有计时器对象
等待 阻塞命令提示符,直到计时器停止运行

例子

全部折叠

使用定时器对象在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之前介绍