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)
输入参数
要找的计时器,指定为计时器对象或计时器对象数组
示例: out = timerfindall(t)
要找的计时器属性,指定为具有与计时器属性名称对应的字段名称的结构体。字段值为对应的属性值。
示例: out = timerfindall(S)
名称-值参数
以 Name1=Value1,...,NameN=ValueN
的形式指定可选参量对组,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: out = timerfind('BusyMode','drop')
回调函数属性
计时器回调函数,指定为字符向量、字符串标量、函数句柄或元胞数组。您必须先定义此属性,然后才能启动计时器。要强制执行事件队列中的回调函数,请在代码中包含对 drawnow
函数的调用。drawnow
函数会刷新事件队列。
如果您使用函数句柄指定此属性,当 MATLAB® 执行回调时,它会将
timer
对象和事件结构体传递给回调函数。事件结构体的Type
字段中包含事件的类型,Data
字段中包含事件的时间。如果您使用字符向量或字符串标量指定此属性,则当 MATLAB 执行回调时,它会对字符向量中包含的 MATLAB 代码求值。不建议将回调定义为字符向量。将函数指定为函数句柄的用法可以让 MATLAB 为回调函数提供重要信息。
如果回调函数接受除
timer
对象和事件数据以外的参量,请将此属性指定为包含函数句柄和其他参量的元胞数组。
有关详细信息,请参阅计时器回调函数。
示例: out = timerfind('TimerFcn',"MyTimerFunction(Input);")
计时器启动回调函数,指定为字符向量、字符串标量、函数句柄或元胞数组。
如果您使用函数句柄指定此属性,当 MATLAB 执行回调时,它会将
timer
对象和事件结构体传递给回调函数。事件结构体的Type
字段中包含事件的类型,Data
字段中包含事件的时间。如果您使用字符向量或字符串标量指定此属性,则当 MATLAB 执行回调时,它会对字符向量中包含的 MATLAB 代码求值。不建议将回调定义为字符向量。将函数指定为函数句柄的用法可以让 MATLAB 为回调函数提供重要信息。
如果回调函数接受除
timer
对象和事件数据以外的参量,请将此属性指定为包含函数句柄和其他参量的元胞数组。
有关详细信息,请参阅计时器回调函数。
示例: out = timerfind('StartFcn',@MyStartFunction(~,~))
计时器停止回调函数,指定为字符向量、字符串标量、函数句柄或元胞数组。
如果您使用函数句柄指定此属性,当 MATLAB 执行回调时,它会将
timer
对象和事件结构体传递给回调函数。事件结构体的Type
字段中包含事件的类型,Data
字段中包含事件的时间。如果您使用字符向量或字符串标量指定此属性,则当 MATLAB 执行回调时,它会对字符向量中包含的 MATLAB 代码求值。不建议将回调定义为字符向量。将函数指定为函数句柄的用法可以让 MATLAB 为回调函数提供重要信息。
如果回调函数接受除
timer
对象和事件数据以外的参量,请将此属性指定为包含函数句柄和其他参量的元胞数组。
有关详细信息,请参阅计时器回调函数。
计时器会在以下情况下停止:
调用计时器
stop
方法。计时器完成执行
TimerFcn
。换句话说,TasksExecuted
的值达到TasksToExecute
设置的限值。出现错误。首先调用
ErrorFcn
回调,然后调用StopFcn
回调。
您可以使用 StopFcn
定义清理操作,例如删除内存中的计时器对象。
示例: out = timerfind('StopFcn',@MyStopFunction(~,~))
计时器错误回调函数,指定为字符向量、字符串标量、函数句柄或元胞数组。如果出现错误,将会执行此函数,然后调用 StopFcn
。
如果您使用字符向量或字符串标量指定此属性,则当 MATLAB 执行回调时,它会对字符向量中包含的 MATLAB 代码求值。
如果您使用函数句柄指定此属性,当 MATLAB 执行回调时,它会将
timer
对象和事件结构体传递给回调函数。事件结构体的Type
字段中包含事件的类型,Data
字段中包含事件的时间。如果回调函数接受除
timer
对象和事件数据以外的参量,请将此属性指定为包含函数句柄和其他参量的元胞数组。
有关详细信息,请参阅计时器回调函数。
示例: out = timerfind('ErrorFcn','disp("An error has occurred")')
计时属性
各次执行之间的延迟,以秒为单位,指定为大于 0.001 的数字。要使计时器使用 Period
,您必须设置 ExecutionMode
和 TasksToExecute
以排定多个计时器对象回调事件的执行。
示例: out = timerfind('Period',5)
计时器启动和第一次执行之间的延迟,以秒为单位,指定为大于或等于 0 的数字。如果 Running = 'on'
,则 StartDelay
是只读的。
示例: out = timerfind('StartDelay',2)
计时器回调函数执行的次数,指定为大于 0 的数字。使用 TasksToExecute
属性设置执行次数。要使用 TasksToExecute
,您必须设置 ExecutionMode
以排定多个计时器回调事件的执行。
示例: out = timerfind('TasksToExecute',5)
计时器函数回调排队,指定为下表中的值之一。使用此属性可以指定在计时器必须在上一次 TimerFcn
执行完毕之前再次执行 TimerFcn
时需采取的操作。当 Running
属性设置为 'on'
时,BusyMode
属性为只读。
| 队列为空时的行为 | 队列不为空时的行为 | 注释 |
---|---|---|---|
| 将任务添加到队列中 | 放弃任务 | 可能跳过 |
| 将任务添加到队列中 | 完成任务;抛出 | 完成执行队列中的任务后停止计时器 |
| 将任务添加到队列中 | 等待队列清除,然后使任务进入队列中 | 调整 |
有关详细信息,请参阅处理计时器队列冲突。
示例: out = timerfind('BusyMode','error')
计时器函数回调调度,指定为下表中的值之一。当 Running='on'
时,ExecutionMode
为只读。下表概述了执行模式。
执行模式 | 时间 |
---|---|
| 计时器回调函数仅执行一次。因此, |
| 在将计时器回调函数添加到 MATLAB 执行队列中后立即启动 |
| 在计时器回调函数经过一段时滞(因 MATLAB 执行队列中出现延迟)后重新开始执行时启动。 |
| 在计时器回调函数完成执行时启动。 |
'singleShot'
是timer
类的单次执行模式,并且是默认值。'fixedDelay'
、'fixedRate'
和'fixedSpacing'
是三个受支持的多次执行模式。这些模式定义Period
属性的起点。Period
属性指定执行之间的间隔时间(保持不变)。只有执行起点是不同的。
示例: out = timerfind('ExecutionMode','fixedDelay')
标注属性
计时器名称,指定为字符向量或字符串标量。
默认值为 'timer-
i
'
,其中 i
是一个数字,指示第 i
个计时器对象创建了此会话。要将 i
重置为 1,请执行 clear classes
命令。
示例: out = timerfind('Name','MyTimer')
对象标签,指定为字符向量或字符串标量。
示例: out = timerfind('Tag','TimerTag')
对象可见性,指定为 'on'
或 'off'
,您可以利用它来阻止最终用户访问应用程序所创建的计时器对象。timerfind
函数不会返回 ObjectVisibility
属性设置为 'off'
的对象。不可见的对象仍然有效。要检索内存中的所有计时器对象(包括不可见对象)的列表,请使用 timerfindall
函数。
示例: out = timerfind('ObjectVisibility','off')
要向对象添加的数据的一般字段。
示例: out = timerfind('UserData',"This is my first timer!")
只读属性
各次执行之间的平均时间,以秒为单位,指定为数值标量。在计时器执行完两次计时器回调之前,该值一直为 NaN
。
最后两次执行之间的时间,以秒为单位,指定为数值标量。在计时器执行完两次计时器回调之前,该值一直为 NaN
。
主动执行回调函数的指示符,指定为 'off'
或 'on'
。
计时器已执行的次数,指定为数值标量。
标识对象类型的字符向量。
输出参量
找到的计时器对象,返回为由计时器对象组成数组。
详细信息
可见的计时器对象是指位于内存中并且 ObjectVisibility
属性设置为 'on' 的计时器对象。
版本历史记录
在 R2006a 之前推出
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- 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)