exponenta event banner

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

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

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

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

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

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

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

Обратные вызовы, которые вызывают notify

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

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

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

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

Вызов функций из дескрипторов функций

При создании дескриптора функции внутри метода класса контекст метода определяет контекст, в котором выполняется функция. Этот контекст предоставляет функции доступ к частным и защищенным методам, доступным для этого класса.

Например, 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

Связанные темы