Вверх ↑
Ответов: 4630
Рейтинг: 749
#1: 2024-04-09 20:05:25 ЛС | профиль | цитата
Интересная вещь с точки зрения реализации. Хотя и нарушает визуализацию алгоритмов в HiAsm.

Компоненты - не смотрел.
Не совсем понятна роль 3-го компонента EventChannel. Предполагаю, компонент для обработки события EventSubscriber и сам занесет имя события в невидимый список в момент задания нового имени.

Потокобезопасность - да, надо внутри защитить работу со списком событий/подписчиков и флагом "уже выполняется".
Не знаю как реализована "защита от рекурсии", но нужно убедиться что при вызове второго события (из параллельного потока), пока выполняется первое, второе не потеряется. А для этого у каждого события должна быть критическая секция, чтобы вызвавшие становились в очередь. Можно добавить свойство события "что делать, если уже выполняется": пропускать или ждать.
Во втором случае могут быть dead lock на крит. секции при вызове из главного потока.

Можно добавить методы для включения/отключения события (что ещё нарушит визуализацию...)

Возможно, не очень удачный термин doPublish/onPublish выбран для вызова события. Вероятно, более понятно будет что-то типа doFireEvent, doCallEvent, onEvent.
карма: 26

0