Выполнение функции обратного вызова может быть задержано, если обратный вызов включает интенсивную ЦП задачу, такую как обновление фигуры.
Объект - таймер поддерживает свойства, которые позволяют вам задать команды MATLAB®, которые выполняются, когда таймер стреляет, и для других событий объекта - таймера, таких как запуск, остановка, или когда ошибка происходит. Они называются обратными вызовами. Чтобы сопоставить команды MATLAB с событием объекта - таймера, установите значение связанного свойства обратного вызова объекта - таймера.
Следующая схема показывает, когда события имеют место во время выполнения объекта - таймера и дают имена свойств объекта - таймера, сопоставленных с каждым событием. Например, чтобы сопоставить команды MATLAB с событием запуска, присвойте значение свойству обратного вызова StartFcn
. Ошибочные обратные вызовы могут произойти в любое время.
События объекта - таймера и связанная функция обратного вызова
Когда период времени, заданный объектом - таймером, протекает, объект - таймер выполняет одну или несколько функций MATLAB вашего выбора. Можно задать функции непосредственно как значение свойства обратного вызова. Можно также поместить команды в функциональный файл и задать функцию как значение свойства обратного вызова.
Этот пример создает объект - таймер, который отображает приветствие после 5 секунд. Пример задает значение свойства обратного вызова TimerFcn
непосредственно, помещая команды в вектор символа.
t = timer('TimerFcn',@(x,y)disp('Hello World!'),'StartDelay',5);
Когда вы задаете команды обратного вызова непосредственно как значение свойства функции обратного вызова, команды оценены в MATLAB workspace.
Вместо того, чтобы задать команды MATLAB непосредственно как значение свойства обратного вызова, можно поместить команды в файл программы MATLAB и задать файл как значение свойства обратного вызова.
Когда вы создаете функцию обратного вызова, первые два аргумента должны быть указателем на объект - таймер и структуру события. Структура события содержит два поля: Type
и Data
. Поле Type
содержит вектор символа, который идентифицирует тип события, которое вызвало обратный вызов. Значение этого поля может быть любым следующим: 'StartFcn'
, 'StopFcn'
, 'TimerFcn'
или 'ErrorFcn'
. Поле Data
содержит время, которое имело место событие.
В дополнение к этим двум необходимым входным параметрам ваша функция обратного вызова может принять специализированные аргументы. Чтобы получить эти входные параметры, необходимо использовать массив ячеек при определении имени функции как значения свойства обратного вызова. Для получения дополнительной информации смотрите Определение Значения Callback Function Properties.
Этот пример реализует простую функцию обратного вызова, которая отображает тип события, которое инициировало обратный вызов и время, обратный вызов произошел. Чтобы проиллюстрировать передающие специализированные аргументы, функция обратного вызова в качестве примера принимает как дополнительный аргумент вектор символа и включает этот текст в отображение вывод. Чтобы видеть эту функцию, используемую со свойством обратного вызова, смотрите Определение Значения Callback Function Properties.
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} |
Этот пример иллюстрирует несколько способов, без которых можно задать значение свойств функции обратного вызова объекта - таймера, некоторых с аргументами и некоторыми. Чтобы видеть код функции обратного вызова, 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)