Re: Технология обработки событий в Delphi6
От: Leonid Troyanovsky  
Дата: 13.08.04 18:28
Оценка: 1 (1)
Здравствуйте, 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>Это пока все. Если нужно для ответа, объясню зачем это мне.


Конечно, дополнительная информация не мешает.
Даже сам термин "событие" неоднозначен.
--
С уважением, LVT
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.