Примечание
Выполнение функции обратного вызова может быть задержано, если коллбэк включает интенсивную центральным процессором задачу, такую как обновление фигуры.
Объект - таймер поддерживает свойства, которые позволяют вам задать команды MATLAB®, которые выполняются, когда таймер стреляет, и для других событий объекта - таймера, таких как запуск, остановка, или когда ошибка происходит. Они называются коллбэками. Чтобы сопоставить команды 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
поле содержит время, которое имело место событие.
В дополнение к этим двум необходимым входным параметрам ваша функция обратного вызова может принять специализированные аргументы. Чтобы получить эти входные параметры, необходимо использовать массив ячеек при определении имени функции как значения свойства коллбэка. Для получения дополнительной информации смотрите Определение Значения 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
'callback'. Обратите внимание на то, что пример задает значение в массиве ячеек, потому что функция обратного вызова должна получить доступ к аргументам, переданным ему:
t.StartFcn = {@my_callback_fcn, 'My start message'};
Задайте значение StopFcn
'callback'. Снова, значение задано в массиве ячеек, потому что функция обратного вызова должна получить доступ к аргументам, переданным ему:
t.StopFcn = { @my_callback_fcn, 'My stop message'};
Задайте значение TimerFcn
'callback'. Пример задает команды 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)