Main Content

本页面提供的是上一版软件的文档。当前版本中已删除对应的英文页面。

set

类: timer

设置计时器对象的属性值

说明

示例

set(t) 显示计时器对象 t 的所有可配置属性的属性名称及其可能值。

示例

propStruct = set(t) struct 中返回这些值。

示例

set(t,Name) 显示计时器对象 t 的指定属性 Name 的可能值。

示例

propCell = set(t,Name) 在元胞中返回这些值。

示例

set(t,Name,Value) 设置由一个或多个 Name,Value 对组参数指定的属性。t 可以是单个计时器对象或计时器对象向量,对于后者,set 会为所有计时器对象 t 配置属性值。

示例

set(t,S) 使用 S 中指定的值配置 t 的属性,其中 S 是一个字段名称为对象属性名称的结构体。

示例

set(t,PN,PV) 针对计时器对象 t 将字符向量元胞数组 PN 中指定的属性配置为元胞数组 PV 中的对应值。

输入参数

t

timer 的对象。

S

结构体,其字段名称等于 timer 属性名称。

PN,PV

字符向量元胞数组 PN 及对应的值元胞数组 PVPN 元胞数组必须是一个 1×N 或 N×1 数组。如果 t 是一个计时器对象数组,则 PV 可以是一个 M×N 元胞数组,其中 M 等于 t 的长度,N 等于 PN 的长度。在这种情况下,每个计时器对象都会用一组不同值更新 PN 中包含的属性名称列表。

名称-值对组参数

指定可选的、以逗号分隔的 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

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

输出参数

propStruct

t 的可配置属性,以结构体形式返回。propStruct 的字段名称为 t 的属性名称,propStruct 的关联值为可能的属性值元胞数组。如果 t 中的属性没有一组有限的可能值,则 propStruct 中的属性值为空元胞数组。

propCell

给定属性名称的可能值,以字符向量元胞数组形式返回。如果该属性没有一组有限的可能值,set 将返回空元胞数组。

示例

全部展开

对计时器对象进行实例化并调用 set 方法。

t = timer;
set(t)
                Name: {}
                 Tag: {}
    ObjectVisibility: {2x1 cell}
      TasksToExecute: {}
            StartFcn: {}
             StopFcn: {}
            ErrorFcn: {}
            TimerFcn: {}
          StartDelay: {}
              Period: {}
            BusyMode: {3x1 cell}
       ExecutionMode: {4x1 cell}
            UserData: {}

某些计时器属性(如 Running)是只读的,因此不会显示。

使用 set 方法输出结构体。

out = set(t)
out = struct with fields:
                Name: {}
                 Tag: {}
    ObjectVisibility: {2x1 cell}
      TasksToExecute: {}
            StartFcn: {}
             StopFcn: {}
            ErrorFcn: {}
            TimerFcn: {}
          StartDelay: {}
              Period: {}
            BusyMode: {3x1 cell}
       ExecutionMode: {4x1 cell}
            UserData: {}

从内存中删除计时器对象。

delete(t)

对计时器对象进行实例化并显示 BusyMode 属性的可能值。

t = timer;
set(t,'BusyMode')
  3x1 cell array

    {'drop' }
    {'queue'}
    {'error'}

输出显示了 BusyMode 的三个可能值。默认值 drop 用花括号指示。

显示 ErrorFcn 的可能值。

set(t,'ErrorFcn')
  0x0 empty cell array

由于 ErrorFcn 没有一组可能值列表,因此会显示可能值的说明。

输出可能的属性值。

out1 = set(t,'BusyMode')
out1 = 3x1 cell
    {'drop' }
    {'queue'}
    {'error'}

out2 = set(t,'ErrorFcn')
out2 =

  0x0 empty cell array

虽然 set(t,'ErrorFcn') 会显示可能值的说明,但 out2 = set(t,'ErrorFcn') 只会返回一个空元胞。

从内存中删除计时器。

delete(t)

对计时器对象进行实例化并使其不可见。显示对象的可见性并将其删除。

t = timer;
set(t,'ObjectVisibility','off')
get(t,'ObjectVisibility')
ans = 
'off'
delete(t)

构造一个结构体以修改多个计时器对象属性。

s.BusyMode = 'queue';
s.ExecutionMode = 'fixedDelay';
s.ObjectVisibility = 'off'
s = struct with fields:
            BusyMode: 'queue'
       ExecutionMode: 'fixedDelay'
    ObjectVisibility: 'off'

创建一个计时器,显示 s 中的属性,修改该计时器,显示新的属性值,然后删除该计时器。

t = timer;
get(t,{'BusyMode','ExecutionMode','ObjectVisibility'})
ans=1×3 cell array
    {[drop]}    {[singleShot]}    {'on'}

set(t,s)
get(t,{'BusyMode','ExecutionMode','ObjectVisibility'})
ans=1×3 cell array
    {[queue]}    {[fixedDelay]}    {'off'}

delete(t)

创建一个由要修改的属性组成的元胞数组,以及一个由对应属性的值组成的元胞数组。对计时器进行实例化,并显示属性名称元胞数组 nameArr 中的属性的初始值。

nameArr = {'BusyMode','ExecutionMode','Period'};
valArr = {'queue','fixedDelay',3};
t = timer;
get(t,nameArr)
ans=1×3 cell array
    {[drop]}    {[singleShot]}    {[1]}

修改计时器对象并显示新的属性值。删除该计时器。

set(t,nameArr,valArr)
get(t,nameArr)
ans=1×3 cell array
    {[queue]}    {[fixedDelay]}    {[3]}

delete(t)

对由三个计时器组成的数组进行实例化。创建一个新的属性名称元胞数组,以修改 BusyModeExecutionModeUserData 属性。显示每个计时器的属性的初始值。

tArr = [timer timer timer];
nameArr = {'BusyMode','ExecutionMode','UserData'};
get(tArr,nameArr)
ans=3×3 cell array
    {[drop]}    {[singleShot]}    {0x0 double}
    {[drop]}    {[singleShot]}    {0x0 double}
    {[drop]}    {[singleShot]}    {0x0 double}

为每个计时器的每个属性分配一个不同的值。创建一个包含新值的元胞数组。每一行指示对应计时器中的属性的值。

valArr = {'queue','fixedDelay',3;...
            'error','fixedSpacing',42;...
            'drop','fixedRate','hello'};

修改计时器对象属性并显示更新值。

set(tArr,nameArr,valArr)
get(tArr,nameArr)
ans=3×3 cell array
    {[queue]}    {[fixedDelay  ]}    {[    3]}
    {[error]}    {[fixedSpacing]}    {[   42]}
    {[drop ]}    {[fixedRate   ]}    {'hello'}

从内存中删除这些计时器。

delete(tArr)

备选方法

您也可以使用圆点表示法设置计时器对象属性。例如,t.ObjectVisibility = 'off'set(t,'ObjectVisibility','off') 为属性设置的值相同。

另请参阅

|

在 R2006a 之前推出