Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];

Вниз

Событийная архитектура в Builder/Delphi   Найти похожие ветки 

 
Unhandled Exception   (2002-08-11 20:23) [0]

Товарищи!
Как Вы считаете, почему Borland принял на вооружение такой негибкий
механизм событий. В отличие от прочих событийно-ориентированных технологий,
таких как Java или COM, в Дельфях нельзя "повесить" несколько обработчиков
на одно и тоже событие. Скажу честно, Мне это создало большие проблемы.
Например, Мне нужна была более детальная информация о событиях, происходящих
с DataSet"ом, чем можно получить через DataLink. Казалось бы, пользуйся
событиями BeforeOpen и прочими. Так нет. Если ещё кто-то ими заинтересуется
после Меня, то Меня ни о чём уже не будет никто извещать. Похожая ситуация
будет со слушателем этих событий, который подписался на них раньше Меня.
Собственно теперь вопрос к экспертам по Дельфям. Можно ли доработать
VCL для поддержки множества слушателей на одно и тоже событие? Можно ли
организовать списки слушателей, добавить механизм подписки/отписки от
событий, не нарушая при этом прежний стиль программирования. Не надумана
ли эта проблема? Может всем, кроме Меня, всегда хватало одного слушателя
событий?


 
drpass   (2002-08-11 21:51) [1]

Нет, нельзя. Дело в том, что в VCL вообще нет механизма событий как такового. Это лишь хитрая уловка, позволяющая сделать более удобной разработку. "События" на самом деле представляют собой переменные-указатели на процедуры. Создавая обработчик, ты просто пишешь процедуру и присваиваешь этой переменной ее адрес. Затем в коде VCL, там где нужно сгенерировать событие, просто проверяется эта переменная и если она куда-то указывает, по этому адресу будет передано управление. Вот и все. Просто, зато эффективно.
А поскольку события происходят только в рамках одной программы, никаких проблем их "однонаправленность" не должна составлять. Если так нужно добавлять/удалять слушателей, сделай в обработчике несложный "менеджер", который будет вызывать нужные вторичные обработчики.


 
vuk   (2002-08-12 00:21) [2]

to Unhandled Exception:

>Как Вы считаете, почему Borland принял на вооружение такой
>негибкий механизм событий.
Все просто. Технолония компонентная архитектура VCL доольно-таки старая и появилась несколько раньше многих современных архитектур, где есть мульткастинг событий. Далее же такая ситуация сохранялась исключительно по причинам необходимости совместимости снизу вверх для имеющихся проектов. Тем не менее был тонкий намек от borland, что в будущих версиях Delphi, возможно, будет реализован мультикастинг событий.


to drpass:
>А поскольку события происходят только в рамках одной программы,
>никаких проблем их "однонаправленность" не должна составлять.
Рамки одной программы ни при чем. Даже в пределах одной формы, не говоря уже о программе, можно получить массу проблем из-за отсутствия мультикастинга.

>сделай в обработчике несложный "менеджер", который будет
>вызывать нужные вторичные обработчики.
К сожалению это невозможно сделать абсолютно прозрачно и надежно.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.007 c
4-14356
S@rge
2002-07-03 01:00
2002.09.05
CreateRemoteThread в Win98


4-14340
Lamer86
2002-07-05 11:28
2002.09.05
исходники Hook a с клавиатурой


1-14031
zam
2002-08-26 13:55
2002.09.05
Как узнать статус нажатых кнопок мыши и позицию курсора?


1-14123
Demon[DZ]
2002-08-23 16:20
2002.09.05
Ошибка с ДЛЛ


3-13965
Selax
2002-08-15 07:26
2002.09.05
CachedUpdate на модифицированную запись





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский