• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

TNotifyList ?

  • Автор темы Guest
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest

Здравствуйте,
есть такая проблема.

Надо завязать между собой несколько компонентов: один является источником события (надо сигнализировать о некоторого рода изменениях в состоянии компонента), другие должны его отлавливать и обрабатывать.
Как я понял, TNotifyEvent сюда не подойдет, так как он уместен только в случае наличия одного "заинтересованного" компонента.

Нашел в хелпе упоминание о TNotifyList, но оно всего лишь упомнинание, реальной помощи от него нет.

Заранее спасибо.
 
S

Sensei

поставь задачу конкретней, просто может оказаться , что не надо так сложно делать, как ты хочешь.
 
J

jo1nt

Если я правильно понял вопрос, тебе надо событие рассылать многим подписчикам.

Насколько я помню, в CBuilder для объявления указателя на метод класса используется слово closure(или __closure), но я точного синтаксиса не помню, поэтому в примере напишу на "чистом" С++.
Примерная реализация


Код:
class YourClass
{

public:
typedef void (TObject::*PointerToFunc)(YourClass* Sender);
std::list<PointerToFunc> pointers; 
void BroadcastEvents(void)
{
typedef std::list<PointerToFunc>::iterator pfIter;
for (pfIter it =pointers.begin(); it!=pointers.end;++it)
*it(this);
}
}
соответсвенно, подписаться можно через
pointers.push_back, pointers.push_front.
Тут для простоты pointers объявлены "public", можно написать класс, который бы предоставлял удобный интерфейс для добавления/удаления подписчиков, напр. переопределением "+=" и "-=", в качестве контейнера использовать vector и т.п.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!