timerfindall
查找所有计时器对象
语法
说明
查找内存中存在的计时器对象(不考虑可见性,其属性值与作为 out
= timerfindall(Name,Value
)Name,Value
参量传递的属性值匹配),并返回数组 out
。Value
可以是空数组。在本例中,timerfindall
为 Name
指定的属性查找具有空值的计时器。
将 out
= timerfindall(t
,Name,Value
)Name,Value
参量与 t
中列出的计时器对象进行匹配(其中 t
可以是计时器对象数组),并返回一个数组 out
。
示例
停止所有计时器
使用 timerfindall
函数可以同时停止多个计时器,即使计时器变量已从工作区中删除也是如此。
创建两个计时器对象,它们生成 100 个随机数并执行一百万次。定义 StopFcn
回调,以显示消息“Timer has stopped.”。启动计时器并验证计时器是否正在运行
t1 = timer('TimerFcn','rand(100,1);',... 'ExecutionMode','fixedSpacing','TasksToExecute',1e6,... 'StopFcn','disp(''Timer1 has stopped.'')'); t2 = timer('TimerFcn','rand(100,1);',... 'ExecutionMode','fixedSpacing','TasksToExecute',1e6,... 'StopFcn','disp(''Timer2 has stopped.'')'); start([t1 t2])
从工作区清除计时器变量。
clear
使用 timerfindall
手动停止计时器,并验证它们不再运行。
stop(timerfindall) t1.Running
ans = 'off'
t2.Running
ans = 'off'
删除这些计时器。
delete(timerfindall)
查找和删除内存中的所有计时器
创建四个计时器对象。
t1 = timer('TimerFcn',@(~,~)disp('Timer 1 Fired!')); t2 = timer('TimerFcn',@(~,~)disp('Timer 2 Fired!')); t3 = timer('TimerFcn',@(~,~)disp('Timer 3 Fired!')); t4 = timer('TimerFcn',@(~,~)disp('Timer 4 Fired!'));
将计时器 t2
和 t4
设置为不可见。
t2.ObjectVisibility = 'off'; t4.ObjectVisibility = 'off';
从工作区中清除计时器 t1
和 t2
。
clear t1 t2 whos
Name Size Bytes Class Attributes t3 1x1 104 timer t4 1x1 104 timer
查找内存中的所有可见计时器。
timerfind
Timer Object Array Index: ExecutionMode: Period: TimerFcn: Name: 1 singleShot 1 1x1 function_handle arraytimer-1 2 singleShot 1 1x1 function_handle arraytimer-3
timerfind
仅查找计时器 t1
和 t2
,因为它们是可见的。计时器 t2
仍然有效并位于内存中,即使已将其从工作区中清除
查找内存中的所有计时器。
timerfindall
Timer Object Array Index: ExecutionMode: Period: TimerFcn: Name: 1 singleShot 1 1x1 function_handle arraytimer-1 2 singleShot 1 1x1 function_handle arraytimer-2 3 singleShot 1 1x1 function_handle arraytimer-3 4 singleShot 1 1x1 function_handle arraytimer-4
timerfindall
查找内存中的所有四个有效计时器,即使 t2
和 t4
不可见并且 t1
和 t2
已从工作区中清除。
从内存中删除所有计时器。
delete(timerfindall)
查找不可见计时器
创建四个计时器对象。
t1 = timer('TimerFcn',@(~,~)disp('Timer 1 Fired!')); t2 = timer('TimerFcn',@(~,~)disp('Timer 2 Fired!')); t3 = timer('TimerFcn',@(~,~)disp('Timer 3 Fired!')); t4 = timer('TimerFcn',@(~,~)disp('Timer 4 Fired!'));
将计时器 t2
和 t4
设置为不可见。从工作区中清除计时器 t1
和 t2
。
t2.ObjectVisibility = 'off'; t4.ObjectVisibility = 'off'; clear t1 t2; whos
Name Size Bytes Class Attributes t3 1x1 104 timer t4 1x1 104 timer
查找所有有效的不可见计时器。
out = timerfindall('ObjectVisibility','off')
Timer Object Array Index: ExecutionMode: Period: TimerFcn: Name: 1 singleShot 1 1x1 function_handle arraytimer-2 2 singleShot 1 1x1 function_handle arraytimer-4
通过 timerfindall
找到了两个有效的不可见计时器,无论这些计时器是否位于工作区中。
查找内存中存在的特定计时器对象
创建多个单独的计时器以及计时器数组。
t1 = timer('Tag', 'broadcastProgress','UserData','Monday'); t2 = timer('Tag', 'displayProgress','UserData','Monday'); timerArr = [timer('Tag', 'broadcastProgress','UserData','Tuesday'); timer('Tag', 'displayProgress','UserData','Tuesday'); timer('Tag', 'displayProgress','UserData','Wednesday');];
使计时器 t1
和 timerArr(2)
不可见。
t1.ObjectVisibility = 'off'; timerArr(2).ObjectVisibility = 'off';
使用 timerfind
查找内存中的所有计时器。
out1 = timerfind
Timer Object Array Index: ExecutionMode: Period: TimerFcn: Name: 1 singleShot 1 '' timer-2 2 singleShot 1 '' timer-3 3 singleShot 1 '' timer-5
timerfind
不会查找隐藏的计时器。
使用 timerfindall
查找内存中的所有计时器。
out2 = timerfindall
Timer Object Array Index: ExecutionMode: Period: TimerFcn: Name: 1 singleShot 1 '' timer-1 2 singleShot 1 '' timer-2 3 singleShot 1 '' timer-3 4 singleShot 1 '' timer-4 5 singleShot 1 '' timer-5
timerfindall
可以查找所有计时器,即便是不可见的计时器也能找到。
仅查找内存中 Tag
属性值为 'displayProgress'
的计时器。
out3 = timerfindall('Tag','displayProgress')
Timer Object Array Index: ExecutionMode: Period: TimerFcn: Name: 1 singleShot 1 '' timer-2 2 singleShot 1 '' timer-4 3 singleShot 1 '' timer-5
将对 Tag
属性值为 'displayProgress'
的计时器的搜索限制到 timerArr
中的计时器对象。
out4 = timerfindall(timerArr,'Tag','displayProgress')
Timer Object Array Index: ExecutionMode: Period: TimerFcn: Name: 1 singleShot 1 '' timer-4 2 singleShot 1 '' timer-5
定义一个包含感兴趣的 Tag
和 UserData
属性的 struct
。
searchStruct = struct('Tag','broadcastProgress','UserData','Monday')
searchStruct = Tag: 'broadcastProgress' UserData: 'Monday'
使用 struct
作为搜索条件来查找内存中的计时器对象。
out5 = timerfindall(searchStruct)
Timer Object: timer-1 Timer Settings ExecutionMode: singleShot Period: 1 BusyMode: drop Running: off Callbacks TimerFcn: '' ErrorFcn: '' StartFcn: '' StopFcn: ''
删除计时器对象。
delete(timerfindall)
输入参数
t
— 计时器对象
计时器对象 | 计时器对象数组
要找的计时器,指定为计时器对象或计时器对象数组
示例: out = timerfindall(t)
S
— 字段名称
结构体,其字段名称对应于计时器属性名称
要找的计时器属性,指定为具有与计时器属性名称对应的字段名称的结构体。字段值为对应的属性值。
示例: out = timerfindall(S)
名称-值参数
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: out = timerfind('BusyMode','drop')
TimerFcn
— 计时器回调函数
字符向量 | 字符串标量 | 函数句柄 | 元胞数组
计时器回调函数,指定为字符向量、字符串标量、函数句柄或元胞数组。您必须先定义此属性,然后才能启动计时器。要强制执行事件队列中的回调函数,请在代码中包含对 drawnow
函数的调用。drawnow
函数会刷新事件队列。
如果您使用函数句柄指定此属性,当 MATLAB® 执行回调时,它会将
timer
对象和事件结构体传递给回调函数。事件结构体的Type
字段中包含事件的类型,Data
字段中包含事件的时间。如果您使用字符向量或字符串标量指定此属性,则当 MATLAB 执行回调时,它会对字符向量中包含的 MATLAB 代码求值。不建议将回调定义为字符向量。将函数指定为函数句柄的用法可以让 MATLAB 为回调函数提供重要信息。
如果回调函数接受除
timer
对象和事件数据以外的参量,请将此属性指定为包含函数句柄和其他参量的元胞数组。
有关详细信息,请参阅计时器回调函数。
示例: t = timer('TimerFcn',"MyTimerFunction(Input);")
StartFcn
— 计时器启动回调函数
字符向量 | 字符串标量 | 函数句柄 | 元胞数组
计时器启动回调函数,指定为字符向量、字符串标量、函数句柄或元胞数组。
如果您使用函数句柄指定此属性,当 MATLAB 执行回调时,它会将
timer
对象和事件结构体传递给回调函数。事件结构体的Type
字段中包含事件的类型,Data
字段中包含事件的时间。如果您使用字符向量或字符串标量指定此属性,则当 MATLAB 执行回调时,它会对字符向量中包含的 MATLAB 代码求值。不建议将回调定义为字符向量。将函数指定为函数句柄的用法可以让 MATLAB 为回调函数提供重要信息。
如果回调函数接受除
timer
对象和事件数据以外的参量,请将此属性指定为包含函数句柄和其他参量的元胞数组。
有关详细信息,请参阅计时器回调函数。
示例: t = timer('StartFcn',@MyStartFunction(~,~))
StopFcn
— 计时器停止回调函数
字符向量 | 字符串标量 | 函数句柄 | 元胞数组
计时器停止回调函数,指定为字符向量、字符串标量、函数句柄或元胞数组。
如果您使用函数句柄指定此属性,当 MATLAB 执行回调时,它会将
timer
对象和事件结构体传递给回调函数。事件结构体的Type
字段中包含事件的类型,Data
字段中包含事件的时间。如果您使用字符向量或字符串标量指定此属性,则当 MATLAB 执行回调时,它会对字符向量中包含的 MATLAB 代码求值。不建议将回调定义为字符向量。将函数指定为函数句柄的用法可以让 MATLAB 为回调函数提供重要信息。
如果回调函数接受除
timer
对象和事件数据以外的参量,请将此属性指定为包含函数句柄和其他参量的元胞数组。
有关详细信息,请参阅计时器回调函数。
计时器会在以下情况下停止:
调用计时器
stop
方法。计时器完成执行
TimerFcn
。换句话说,TasksExecuted
的值达到TasksToExecute
设置的限值。出现错误。首先调用
ErrorFcn
回调,然后调用StopFcn
回调。
您可以使用 StopFcn
定义清理操作,例如删除内存中的计时器对象。
示例: t = timer('StopFcn',@MyStopFunction(~,~))
ErrorFcn
— 计时器错误回调函数
字符向量 | 字符串标量 | 函数句柄 | 元胞数组
计时器错误回调函数,指定为字符向量、字符串标量、函数句柄或元胞数组。如果出现错误,将会执行此函数,然后调用 StopFcn
。
如果您使用字符向量或字符串标量指定此属性,则当 MATLAB 执行回调时,它会对字符向量中包含的 MATLAB 代码求值。
如果您使用函数句柄指定此属性,当 MATLAB 执行回调时,它会将
timer
对象和事件结构体传递给回调函数。事件结构体的Type
字段中包含事件的类型,Data
字段中包含事件的时间。如果回调函数接受除
timer
对象和事件数据以外的参量,请将此属性指定为包含函数句柄和其他参量的元胞数组。
有关详细信息,请参阅计时器回调函数。
示例: t = timer('ErrorFcn','disp("An error has occurred")')
Period
— 各次执行之间的延迟
1 (默认) | 数值标量
各次执行之间的延迟,以秒为单位,指定为大于 0.001 的数字。要使计时器使用 Period
,您必须设置 ExecutionMode
和 TasksToExecute
以排定多个计时器对象回调事件的执行。
示例: t = timer('Period',5)
StartDelay
— 计时器启动和第一次执行之间的延迟
0 (默认) | 数值标量
计时器启动和第一次执行之间的延迟,以秒为单位,指定为大于或等于 0 的数字。如果 Running = 'on'
,则 StartDelay
是只读的。
示例: t = timer('StartDelay',2)
TasksToExecute
— 计时器回调函数执行的次数
数值标量
计时器回调函数执行的次数,指定为大于 0 的数字。使用 TasksToExecute
属性设置执行次数。要使用 TasksToExecute
,您必须设置 ExecutionMode
以排定多个计时器回调事件的执行。
示例: t = timer('TasksToExecute',5)
BusyMode
— 计时器函数回调排队
'drop'
(默认) | 'error'
| 'queue'
计时器函数回调排队,指定为下表中的值之一。使用此属性可以指定在计时器必须在上一次 TimerFcn
执行完毕之前再次执行 TimerFcn
时需采取的操作。当 Running
属性设置为 'on'
时,BusyMode
属性为只读。
| 队列为空时的行为 | 队列不为空时的行为 | 注释 |
---|---|---|---|
| 将任务添加到队列中 | 放弃任务 | 可能跳过 |
| 将任务添加到队列中 | 完成任务;引发 | 完成执行队列中的任务后停止计时器 |
| 将任务添加到队列中 | 等待队列清除,然后使任务进入队列中 | 调整 |
有关详细信息,请参阅处理计时器队列冲突。
示例: t = timer('BusyMode','error')
ExecutionMode
— 计时器函数回调调度
'singleShot'
(默认) | 'fixedRate'
| 'fixedDelay'
| 'fixedSpacing'
计时器函数回调调度,指定为下表中的值之一。当 Running='on'
时,ExecutionMode
为只读。下表概述了执行模式。
执行模式 | 时间 |
---|---|
| 计时器回调函数仅执行一次。因此, |
| 在将计时器回调函数添加到 MATLAB 执行队列中后立即启动 |
| 在计时器回调函数经过一段时滞(因 MATLAB 执行队列中出现延迟)后重新开始执行时启动。 |
| 在计时器回调函数完成执行时启动。 |
'singleShot'
是timer
类的单次执行模式,并且是默认值。'fixedDelay'
、'fixedRate'
和'fixedSpacing'
是三个受支持的多次执行模式。这些模式定义Period
属性的起点。Period
属性指定执行之间的间隔时间(保持不变)。只有执行起点是不同的。
示例: t = timer('ExecutionMode','fixedDelay')
Name
— 计时器名称
'timer-i'
(默认) | 字符向量 | 字符串标量
计时器名称,指定为字符向量或字符串标量。
默认值为 'timer-
i
'
,其中 i
是一个数字,指示第 i
个计时器对象创建了此会话。要将 i
重置为 1,请执行 clear classes
命令。
示例: t = timer('Name','MyTimer')
Tag
— 对象标签
字符向量 | 字符串标量
对象标签,指定为字符向量或字符串标量。
示例: t = timer('Tag','TimerTag')
ObjectVisibility
— 对象可见性
'on'
(默认) | 'off'
对象可见性,指定为 'on'
或 'off'
,您可以利用它来阻止最终用户访问应用程序所创建的计时器对象。timerfind
函数不会返回 ObjectVisibility
属性设置为 'off'
的对象。不可见的对象仍然有效。要检索内存中的所有计时器对象(包括不可见对象)的列表,请使用 timerfindall
函数。
示例: t = timer('ObjectVisibility','off')
UserData
— 用户数据的字段
任何有效的 MATLAB 数据类型
要向对象添加的数据的一般字段。
示例: t = timer('UserData',"This is my first timer!")
AveragePeriod
— 各次执行之间的平均时间
数值标量
各次执行之间的平均时间,以秒为单位,指定为数值标量。在计时器执行完两次计时器回调之前,该值一直为 NaN
。
InstantPeriod
— 最后两次执行之间的时间
NaN
(默认) | 数值标量
最后两次执行之间的时间,以秒为单位,指定为数值标量。在计时器执行完两次计时器回调之前,该值一直为 NaN
。
Running
— 主动执行回调函数的指示符
'off'
| 'on'
主动执行回调函数的指示符,指定为 'off'
或 'on'
。
TasksExecuted
— 计时器已执行的次数
数值标量
计时器已执行的次数,指定为数值标量。
Type
— 对象类型
'timer'
(默认)
标识对象类型的字符向量。
输出参量
out
— 找到的计时器对象
计时器对象数组
找到的计时器对象,返回为由计时器对象组成数组。
详细信息
可见的计时器对象
可见的计时器对象是指位于内存中并且 ObjectVisibility
属性设置为 'on' 的计时器对象。
版本历史记录
在 R2006a 之前推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)