Выполнение обратного вызова

Когда обратные вызовы выполняются

Прослушиватели выполняют свою функцию обратного вызова, когда уведомлено, которую имело место событие. Прослушиватели являются пассивными наблюдателями в том смысле, что ошибки в выполнении обратного вызова прослушивателя не предотвращают выполнение других прослушивателей, отвечающих на то же событие или выполнение функции, которая инициировала событие.

Выполнение функции обратного вызова продолжается, пока функция не завершается. Если ошибка происходит в функции обратного вызова, остановки выполнения и управление возвращается к функции вызова. Затем любые остающиеся функции обратного вызова прослушивателя выполняются.

Порядок прослушивателя выполнения

Порядок, в котором функции обратного вызова прослушивателей выполняются после увольнения события, не определен. Однако все обратные вызовы прослушивателя выполняются синхронно с увольнением события.

Класс Handle вызовы метода handle.notify все прослушиватели перед возвращающимся выполнением к функции, который названный notify.

Обратные вызовы, Которые уведомляет Вызов

Не изменяйте и повторное использование или копия и снова используйте объект данных о событиях, что вы передаете notify, который затем передается обратному вызову прослушивателя.

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

Управление ошибок обратного вызова

Если вы хотите управлять, как ваша программа отвечает на ошибки, используйте оператор try/catch в своей функции обратного вызова прослушивателя, чтобы обработать ошибки.

Вызов Functions from Function Handles

Когда вы создаете указатель на функцию в методе класса, контекст метода определяет контекст, в котором выполняется функция. Этот контекст предоставляет функциональный доступ к закрытым и защищенным методам, которые доступны для того класса.

Например, класс UpdateEvt задает событие под названием Update и прослушиватель для того события. Обратный вызов прослушивателя является закрытым методом evtCb.

classdef UpdateEvt < handle
   events
      Update
   end
   methods
      function obj = UpdateEvt
         addlistener(obj,'Update',@evtCb);
      end
   end
   methods (Access = private)
      function obj = evtCb(obj,varargin)
         disp('Updated Event Triggered')
      end
   end
end

Закрытые методы обычно доступны только методами класса. Однако, потому что указатель на функцию создается в методе класса, notify может выполнить обратный вызов от за пределами класса:

a = UpdateEvt;
a.notify('Update')
Updated Event Triggered

Похожие темы

Была ли эта тема полезной?