Примечание
Выполнение функции обратного вызова может быть задержано, если обратный вызов связан с интенсивной задачей ЦП, такой как обновление фигуры.
Объект timer поддерживает свойства, позволяющие задавать команды MATLAB ®, которые выполняются при срабатывании таймера, а также для других событий объекта timer, таких как запуск, остановка или ошибка. Они называются обратными вызовами. Чтобы связать команды MATLAB с событием объекта таймера, задайте значение свойства обратного вызова связанного объекта таймера.
На следующей схеме показано, когда события происходят во время выполнения объекта таймера, и приведены имена свойств объекта таймера, связанных с каждым событием. Например, чтобы связать команды MATLAB с событием запуска, присвойте значение StartFcn свойство обратного вызова. Обратные вызовы с ошибками могут происходить в любое время.
События объекта таймера и связанная функция обратного вызова

По истечении периода времени, заданного объектом таймера, объект таймера выполняет одну или несколько выбранных функций MATLAB. Функции можно указать непосредственно в качестве значения свойства обратного вызова. Можно также поместить команды в файл функции и указать функцию в качестве значения свойства обратного вызова.
В этом примере создается объект таймера, отображающий приветствие через 5 секунд. В примере указывается значение TimerFcn свойство обратного вызова непосредственно, помещая команды в символьный вектор.
t = timer('TimerFcn',@(x,y)disp('Hello World!'),'StartDelay',5);Примечание
При указании команд обратного вызова непосредственно в качестве значения свойства функции обратного вызова команды вычисляются в рабочей области MATLAB.
Вместо указания команд MATLAB непосредственно в качестве значения свойства обратного вызова можно поместить команды в файл программы MATLAB и указать файл в качестве значения свойства обратного вызова.
При создании функции обратного вызова первые два аргумента должны быть дескриптором объекта таймера и структурой события. Структура события содержит два поля: Type и Data. Type содержит символьный вектор, определяющий тип события, вызвавшего обратный вызов. Значение этого поля может быть любым из следующих: 'StartFcn', 'StopFcn', 'TimerFcn', или 'ErrorFcn'. Data содержит время возникновения события.
В дополнение к этим двум необходимым входным аргументам функция обратного вызова может принимать специфичные для приложения аргументы. Для получения этих входных аргументов необходимо использовать массив ячеек при указании имени функции в качестве значения свойства обратного вызова. Дополнительные сведения см. в разделе Определение значения свойств функции обратного вызова.
В этом примере реализована простая функция обратного вызова, которая отображает тип события, инициировавшего обратный вызов, и время выполнения обратного вызова. Чтобы проиллюстрировать передачу специфичных для приложения аргументов, функция обратного вызова принимает в качестве дополнительного аргумента символьный вектор и включает этот текст в вывод на экран. Сведения о том, как эта функция используется со свойством обратного вызова, см. в разделе Указание значения свойств функции обратного вызова.
function my_callback_fcn(obj, event, text_arg) txt1 = ' event occurred at '; 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} |
В этом примере показано несколько способов задания значения свойств функции обратного вызова объекта timer, некоторые - с аргументами, а другие - без. Для просмотра кода функции обратного вызова: my_callback_fcn, см. Пример: Запись функции обратного вызова:
Создание объекта таймера.
t = timer('StartDelay', 4, 'Period', 4, 'TasksToExecute', 2, ...
'ExecutionMode', 'fixedRate');Укажите значение StartFcn обратный вызов. Обратите внимание, что в примере указано значение в массиве ячеек, поскольку функция обратного вызова должна получить доступ к переданным ей аргументам:
t.StartFcn = {@my_callback_fcn, 'My start message'};Укажите значение StopFcn обратный вызов. Опять же, значение указывается в массиве ячеек, поскольку функция обратного вызова должна получить доступ к переданным ей аргументам:
t.StopFcn = { @my_callback_fcn, 'My stop message'};Укажите значение TimerFcn обратный вызов. В примере указаны команды MATLAB в символьном векторе:
t.TimerFcn = @(x,y)disp('Hello World!');Запустите объект таймера:
start(t)
В примере выводится следующее.
StartFcn event occurred at 10-Mar-2004 17:16:59 My start message Hello World! Hello World! StopFcn event occurred at 10-Mar-2004 17:16:59 My stop message
Удалите объект таймера после его завершения.
delete(t)