主要内容

定时器回调函数

笔记

如果回调涉及cpu密集型任务(如更新图形),则回调函数的执行可能会延迟。

将命令与Timer对象事件相关联

Timer对象支持允许您指定MAT金宝appLAB的属性®在计时器触发时以及其他计时器对象事件(如启动、停止或发生错误时)执行的命令。这些被称为回调.要将MATLAB命令与计时器对象事件关联,请设置关联计时器对象回调属性的值。

下图显示了事件在执行定时器对象期间发生,并给出与每个事件关联的定时器对象属性的名称。例如,要将MATLAB命令与START事件相关联,请为其分配一个值StartFcn回调的财产。任何时候都可能发生错误回调。

定时器对象事件和相关的回调函数

创建回调函数

当定时器对象指定的时间段过去时,定时器对象执行您选择的一个或多个MATLAB函数。您可以直接指定函数作为回调属性的值。您还可以将命令放在函数文件中,并将函数指定为回调属性的值。

直接指定回调函数

这个例子创建了一个定时器对象,它在5秒后显示问候语。属性的值TimerFcn直接回调属性,将命令放在字符向量中。

t =计时器(TimerFcn, @ (x, y) disp(“Hello World !”),“StartDelay”,5);

笔记

直接指定回调命令作为回调函数属性的值时,命令将在MATLAB工作区中进行评估。

将命令放在回调函数中

您可以直接指定MATLAB命令作为回调属性的值,而是可以将命令放在MATLAB程序文件中,并将文件指定为回调属性的值。

创建回调函数时,前两个参数必须是定时器对象的句柄和事件结构。事件结构包含两个字段:类型数据.的类型字段包含标识导致回调的事件类型的字符向量。该字段的值可以是以下任意一个:“StartFcn”'stopfcn''timerfcn', 或者'errorfcn'.的数据字段包含事件发生的时间。

除了这两个必需的输入参数外,回调函数还可以接受特定于应用程序的参数。要接收这些输入参数,在将函数名指定为回调属性的值时,必须使用单元格数组。有关更多信息,请参见指定回调函数属性的值

示例:写回调函数

这个例子实现了一个简单的回调函数,它显示触发回调的事件类型和发生回调的时间。为了说明传递特定于应用程序的参数,示例回调函数接受字符向量作为附加参数,并将此文本包含在显示输出中。要查看与回调属性一起使用的此函数,请参见指定回调函数属性的值

函数my_callback_fcn(obj,事件,text_arg)txt1 ='事件发生在';txt2 = text_arg;event_type = event.type;event_time = datestr(event.data.time);msg = [event_type txt1 event_time];DISP(MSG)DISP(TXT2)

指定回调函数属性的值

通过设置相应的回调属性的值,将回调函数与特定事件相关联。您可以将回调函数指定为单元格数组或函数句柄。如果您的回调函数接受其他参数,则必须使用单元格数组。

下表显示了几个样例回调函数的语法,并描述了如何调用它们。

回调函数语法

如何指定为对象的属性值T.

函数myfile (obj、事件)

t.StartFcn = @myfile

函数myfile

t.startfcn = @(〜,〜)myfile

功能myfile(obj,事件,arg1,arg2)

t.StartFcn = {@myfile, 5, 6}

此示例说明了几种方式,您可以指定定时器对象回调函数属性的值,其中一些具有参数和一些没有。要查看回调函数的代码,my_callback_fcn, 看示例:写回调函数

  1. 创建计时器对象。

    t =计时器('startdelay',4,'时段',4,'taskstoexecute',2,...'executionmode','filedrate');
  2. 指定值的值StartFcn回调。请注意,这个例子指定了单元格数组中的值,因为回调函数需要访问传递给它的参数:

    t.StartFcn = {@my_callback_fcn, '我的开始消息'};
  3. 指定值的值stopfcn.回调。同样,该值在单元格数组中指定,因为回调函数需要访问传递给它的参数:

    t.stopfcn = {@my_callback_fcn,'我的停止消息'};
  4. 指定值的值TimerFcn回调。该示例指定字符向量中的MATLAB命令:

    t.timerfcn = @(x,y)disp('hello world!');
  5. 启动计时器对象:

    开始(t)

    该示例输出以下内容。

    StartFcn事件发生在10-Mar-2004 17:16:59我的开始消息Hello World!你好世界!StopFcn事件发生在2004年3月10日17:16:59我的停止消息
  6. 使用它后删除计时器对象。

    删除(t)

也可以看看

相关的话题