笔记
如果回调涉及cpu密集型任务(如更新图形),则回调函数的执行可能会延迟。
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.StartFcn = @myfile |
|
t.startfcn = @(〜,〜)myfile |
|
t.StartFcn = {@myfile, 5, 6} |
此示例说明了几种方式,您可以指定定时器对象回调函数属性的值,其中一些具有参数和一些没有。要查看回调函数的代码,my_callback_fcn
, 看示例:写回调函数:
创建计时器对象。
t =计时器('startdelay',4,'时段',4,'taskstoexecute',2,...'executionmode','filedrate');
指定值的值StartFcn
回调。请注意,这个例子指定了单元格数组中的值,因为回调函数需要访问传递给它的参数:
t.StartFcn = {@my_callback_fcn, '我的开始消息'};
指定值的值stopfcn.
回调。同样,该值在单元格数组中指定,因为回调函数需要访问传递给它的参数:
t.stopfcn = {@my_callback_fcn,'我的停止消息'};
指定值的值TimerFcn
回调。该示例指定字符向量中的MATLAB命令:
t.timerfcn = @(x,y)disp('hello world!');
启动计时器对象:
开始(t)
该示例输出以下内容。
StartFcn事件发生在10-Mar-2004 17:16:59我的开始消息Hello World!你好世界!StopFcn事件发生在2004年3月10日17:16:59我的停止消息
使用它后删除计时器对象。
删除(t)