Функции обратного вызова таймера

Примечание

Выполнение функции обратного вызова может быть отложено, если коллбэк включает интенсивную задачу CPU, такую как обновление рисунка.

Связь команд с событиями объекта-таймера

Объект-таймер поддерживает свойства, которые позволяют вам задать MATLAB® команды, которые выполняются, когда таймер запускается, и для других событий объекта-таймера, таких как запуск, остановка или когда возникает ошибка. Они называются коллбэками. Чтобы связать команды MATLAB с событием объекта-таймера, задайте значение связанного свойства объекта-таймера коллбэка.

Следующая схема показов, когда события происходят во время выполнения объекта-таймера, и приводит имена свойств объектов-таймеров, связанных с каждым событием. Например, чтобы связать команды MATLAB с событием запуска, присвойте значение StartFcn свойство коллбэка. Коллбэки с ошибками могут возникнуть в любое время.

События объекта-таймера и связанная функция обратного вызова

Создание функций обратного вызова

Когда истекает период времени, заданный объектом-таймером, объект-таймер выполняет одну или несколько функций MATLAB по вашему выбору. Можно задать функции непосредственно как значение свойства коллбэка. Можно также поместить команды в файл функции и задать функцию как значение свойства коллбэка.

Определение функций обратного вызова непосредственно

Этот пример создает объект-таймер, который отображает приветствие через 5 секунд. Пример задает значение TimerFcn свойство коллбэка непосредственно, помещая команды в вектор символов.

t = timer('TimerFcn',@(x,y)disp('Hello World!'),'StartDelay',5);

Примечание

Когда вы задаете команды коллбэка непосредственно как значение свойства функции обратного вызова, команды оцениваются в рабочем пространстве MATLAB.

Установка команд в функцию обратного вызова

Вместо того, чтобы задавать команды MATLAB непосредственно как значение свойства коллбэка, можно поместить команды в программный файл MATLAB и задать файл как значение свойства коллбэка.

Когда вы создаете функцию обратного вызова, первые два аргумента должны быть указателем на объект-таймер и структуру события. Структура события содержит два поля: Type и Data. The Type поле содержит вектор символов, который определяет тип события, вызвавшего коллбэк. Значение этого поля может быть любым из следующих: 'StartFcn', 'StopFcn', 'TimerFcn', или 'ErrorFcn'. The 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

function myfile(obj, event)

t.StartFcn = @myfile

function myfile

t.StartFcn = @(~,~)myfile

function myfile(obj, event, arg1, arg2)

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

Этот пример иллюстрирует несколько способов, которыми вы можете задать значение объекта-таймера свойств функции обратного вызова, некоторых с аргументами и некоторых без. Чтобы увидеть код функции обратного вызова, my_callback_fcn, см. Пример: Запись функции обратного вызова:

  1. Создайте объект-таймер.

    t = timer('StartDelay', 4, 'Period', 4, 'TasksToExecute', 2, ...
              'ExecutionMode', 'fixedRate');
  2. Задайте значение StartFcn коллбэк. Обратите внимание, что пример задает значение в массиве ячеек, потому что функции обратного вызова необходимо получить доступ к переданным ему аргументам:

    t.StartFcn = {@my_callback_fcn, 'My start message'};
  3. Задайте значение StopFcn коллбэк. Снова, значение задано в массиве ячеек, потому что функции обратного вызова нужен доступ к переданным ему аргументам:

    t.StopFcn = { @my_callback_fcn, 'My stop message'};
  4. Задайте значение TimerFcn коллбэк. Пример задает команды MATLAB в вектор символов:

    t.TimerFcn = @(x,y)disp('Hello World!');
  5. Запустите объект-таймер:

    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
  6. Удалите объект-таймер после того, как вы закончите с ним.

    delete(t)

См. также

Похожие темы