Здравствуйте, Eeereal, Вы писали:
E>Интересует технология работы с событиями, в частнгости такие моменты:
E> — кто вызывает метод-обработчик: объект, генерирующий событие, или поток, в контексте которого создан объект?
Скажем, TControl получает компонентные сообщения, например, cm_activate.
Эти сообщения, в большинстве, дублируют сообщения Windows, тот же
WM_ACTIVATE, но, т.к. не все TControl имеют окно (не TWinControl),
они могут пересылаться и не через Post/SendMessage.
Обработчик сообщения cm_activate
type
TXControl = class(TControl)
..
private
{ Private declarations }
procedure CMActivate(var Message: TCMActivate); message cm_activate;
..
end;
вызывает метод диспетчеризации (procedure Activate; dynamic) который
проверяет наличие обработчика OnActivate и вызывает его с
требуемыми параметрами (Self).
Но обработчики не обязательно представляют реакцию на сообщение:
http://groups.google.com/groups?selm=4083167687%40f1003.n5080.z2.fidonet.ftn
Кроме того, ясно, что объект, генерирующий событие (например, посланием
сообщения), может быть в другом потоке (в другом приложении, в системе).
E> — какая разница в поведениее системы при генерировании события в объекте, созданном в стандартной нити (thread) и во вторичной?
Т.к. VCL в основном непотокобезопасна, то обработку событий проще всего делать
в контексте первичного потока (в случае участия визуальных компонентов).
Для этого, например, предназначен Synchronize
E>Это пока все. Если нужно для ответа, объясню зачем это мне.
Конечно, дополнительная информация не мешает.
Даже сам термин "событие" неоднозначен.