Интересная вещь с точки зрения реализации. Хотя и нарушает визуализацию алгоритмов в HiAsm.
Компоненты - не смотрел.
Не совсем понятна роль 3-го компонента EventChannel. Предполагаю, компонент для обработки события EventSubscriber и сам занесет имя события в невидимый список в момент задания нового имени.
Потокобезопасность - да, надо внутри защитить работу со списком событий/подписчиков и флагом "уже выполняется".
Не знаю как реализована "защита от рекурсии", но нужно убедиться что при вызове второго события (из параллельного потока), пока выполняется первое, второе не потеряется. А для этого у каждого события должна быть критическая секция, чтобы вызвавшие становились в очередь. Можно добавить свойство события "что делать, если уже выполняется": пропускать или ждать.
Во втором случае могут быть dead lock на крит. секции при вызове из главного потока.
Можно добавить методы для включения/отключения события (что ещё нарушит визуализацию...)
Возможно, не очень удачный термин doPublish/onPublish выбран для вызова события. Вероятно, более понятно будет что-то типа doFireEvent, doCallEvent, onEvent.
Ответов: 4630
Рейтинг: 749
|
|||
карма: 26 |
|