Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

timerfindall

类: timer

查找计时器对象(无论可见性如何)

说明

示例

out = timerfindall 查找内存中存在的计时器对象(无论可见性如何),并返回一个数组 out。使用 ObjectVisibility 属性设置对象的可见性。

示例

out = timerfindall(Name,Value) 查找内存中存在的、属性值与作为 Name,Value 对组参数传递的属性值匹配的计时器对象(无论可见性如何),并返回一个数组 out

示例

out = timerfindall(t,Name,Value)Name,Value 对组参数与 t 中列出的计时器对象进行匹配(其中 t 可以是计时器对象数组),并返回一个数组 out

示例

out = timerfindall(S) 匹配结构体 S 中定义的属性值,并返回一个数组 outS 的字段名称为计时器对象属性名称,字段值为对应的属性值。

输入参数

t

timer 类的对象数组。

S

结构体,其字段名称对应于 timer 对象的属性名称。字段值为对应的属性值。

名称-值对组参数

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在引号中。您可采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,...,NameN,ValueN 所示。

BusyMode

字符向量或字符串标量,指示在计时器必须在上一次 TimerFcn 执行完毕之前再次执行 TimerFcn 时需采取的操作。如果 Running='on',则 BusyMode 是只读的。下表概述了忙碌模式。

BusyMode

队列为空时的行为

队列不为空时的行为

注释

'drop'

将任务添加到队列中

放弃任务

可能跳过 TimerFcn 调用

'error'

将任务添加到队列中

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

完成执行队列中的任务后停止计时器

'queue'

将任务添加到队列中

等待队列清除,然后使任务进入队列中

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

有关详细信息,请参阅处理计时器队列冲突

默认: 'drop'

ErrorFcn

字符向量、字符串标量、函数句柄或元胞数组,用于定义在出现错误时计时器应执行的函数。如果出现错误,将会执行此函数,然后调用 StopFcn

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

  • 如果您使用函数句柄指定此属性,当 MATLAB 执行回调时,它会将 timer 对象和事件结构体传递给回调函数。事件结构体的 Type 字段中包含事件的类型,Data 字段中包含事件的时间。

  • 如果回调函数接受除 timer 对象和事件数据以外的参数,请将此属性指定为包含函数句柄和其他参数的元胞数组。

有关详细信息,请参阅计时器回调函数

ExecutionMode

字符向量或字符串标量,用于定义 timer 对象如何排定计时器事件的字符向量。如果 Running='on',则 ExecutionMode 是只读的。下表概述了执行模式。

执行模式

时间 Period 起点

'singleShot'

在此模式中,计时器回调函数仅执行一次。因此,Period 属性没有任何作用。这是默认的执行模式。

'fixedRate'

在将计时器回调函数添加到 MATLAB 执行队列中后立即启动

'fixedDelay'

在计时器回调函数经过一段时滞(因 MATLAB 执行队列中出现延迟)后重新开始执行时启动

'fixedSpacing'

在计时器回调函数完成执行时启动。

  • 'singleShot'timer 类的单次执行模式,并且是默认值。

  • 'fixedDelay''fixedRate''fixedSpacing' 是三个受支持的多次执行模式。这些模式定义 Period 属性的起点。Period 属性指定执行之间的间隔时间(保持不变)。只有执行起点是不同的。

默认: 'singleShot'

Name

表示 timer 名称的字符向量或字符串标量。

默认: 'timer-i',其中 i 是一个数字,指示第 i 个计时器对象创建了此会话。要将 i 重置为 1,请执行 clear classes 命令。

ObjectVisibility

可能为 'on''off' 的字符向量或字符串标量,您可以利用它来阻止最终用户访问应用程序所创建的计时器对象。timerfind 函数不会返回 ObjectVisibility 属性设置为 'off' 的对象。不可见的对象仍然有效。要检索内存中的所有计时器对象(包括不可见对象)的列表,请使用 timerfindall 函数。

默认: 'on'

Period

大于 0.001 的数字,用于以秒为单位指定 TimerFcn 执行之间的延迟。要使计时器使用 Period,您必须设置 ExecutionModeTasksToExecute 以排定多个计时器对象回调事件的执行。

默认: 1.0

StartDelay

大于或等于 0 的数字,用于以秒为单位指定启动计时器和首次执行 TimerFcn 中指定的函数之间的延迟。如果 Running = 'on',则 StartDelay 是只读的。

默认: 0

StartFcn

字符向量、字符串标量、函数句柄或元胞数组,用于定义在计时器启动时应执行的函数。

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

  • 如果您使用函数句柄指定此属性,当 MATLAB 执行回调时,它会将 timer 对象和事件结构体传递给回调函数。事件结构体的 Type 字段中包含事件的类型,Data 字段中包含事件的时间。

  • 如果回调函数接受除 timer 对象和事件数据以外的参数,请将此属性指定为包含函数句柄和其他参数的元胞数组。

有关详细信息,请参阅计时器回调函数

StopFcn

字符向量、字符串标量、函数句柄或元胞数组,用于定义在计时器停止时应执行的函数。

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

  • 如果您使用函数句柄指定此属性,当 MATLAB 执行回调时,它会将 timer 对象和事件结构体传递给回调函数。事件结构体的 Type 字段中包含事件的类型,Data 字段中包含事件的时间。

  • 如果回调函数接受除 timer 对象和事件数据以外的参数,请将此属性指定为包含函数句柄和其他参数的元胞数组。

有关详细信息,请参阅计时器回调函数

计时器会在以下情况下停止

  • 调用计时器 stop 方法。

  • 计时器完成执行 TimerFcn。换句话说,TasksExecuted 的值达到 TasksToExecute 设置的限值。

  • 出现错误。首先调用 ErrorFcn 回调,然后调用 StopFcn 回调。

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

Tag

字符向量或字符串标量,表示对象的标签。

TasksToExecute

大于 0 的数字,指示计时器对象要执行 TimerFcn 回调的次数。使用 TasksToExecute 属性设置执行次数。要使用 TasksToExecute,您必须设置 ExecutionMode 以排定多个计时器回调事件的执行。

默认: Inf

TimerFcn

字符向量、字符串标量、函数句柄或元胞数组,用于定义计时器回调函数。您必须先定义此属性,然后才能启动计时器。

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

  • 如果您使用函数句柄指定此属性,当 MATLAB 执行回调时,它会将 timer 对象和事件结构体传递给回调函数。事件结构体的 Type 字段中包含事件的类型,Data 字段中包含事件的时间。

  • 如果回调函数接受除 timer 对象和事件数据以外的参数,请将此属性指定为包含函数句柄和其他参数的元胞数组。

有关详细信息,请参阅计时器回调函数

UserData

要向对象添加的数据的一般字段。

仅读取名称-值对组参数

AveragePeriod

自计时器启动后 TimerFcn 每次执行之间的平均时间(以秒为单位)。在计时器执行完两次计时器回调之前,该值一直为 NaN

InstantPeriod

最后两次执行 TimerFcn 之间的时间(以秒为单位)。在计时器执行完两次计时器回调之前,该值一直为 NaN

Running

定义为 'off''on' 的字符向量,指示计时器当前是否正在执行回调函数。

TasksExecuted

计时器自启动后调用 TimerFcn 的次数。

Type

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

示例

全部展开

创建四个计时器对象。

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!'));

将计时器 t2t4 设置为不可见。

t2.ObjectVisibility = 'off';
t4.ObjectVisibility = 'off';

从工作区中清除计时器 t1t2

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 仅查找计时器 t1t2,因为它们是可见的。计时器 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 查找内存中的所有四个有效计时器,即使 t2t4 不可见并且 t1t2 已从工作区中清除。

从内存中删除所有计时器。

delete(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');];

使计时器 t1timerArr(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

定义一个包含感兴趣的 TagUserData 属性的 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)

创建四个计时器对象。

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!'));

将计时器 t2t4 设置为不可见,并将计时器 t1t2 从工作区中清除。

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 找到了两个有效的不可见计时器,无论这些计时器是否位于工作区中。

提示

  • timerfindall 查找内存中的计时器对象,不受 ObjectVisibility 属性值的影响。要将搜索限制为 ObjectVisibility 设置为 'on' 的对象,请使用 timerfind

另请参阅

| |

在 R2006a 之前推出