Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Событие компонента по событию внутри дочернего потока [D7, WinXP]


Untermensch ©   (2006-03-30 16:10:00) 

А какие есть ещё способы получить сообщение от дочернего потока в основной кроме создания скрытого окна и хука основной очереди событий ? И какой способ лучше для работы внутри службы ?


Юрий Зотов   (2006-04-01 11:18:00) [1]

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

Ситуация может усложниться еще больше, если поток порождается компонентом. Сколько таких компонентов юзер накидает на форму - столько и потоков будет, а в результате может получиться полная каша.

В общем, всю эту кухню надо очень хорошо продумать и если неактуальность данных получается возможной, то лучше возбуждать событие синхронно, через Synchronize или SendMessage.


Сергей М.   (2006-03-31 10:07:00) [2]


> А какие есть ещё способы


А чем этот способ не устраивает ?


> какой способ лучше для работы внутри службы ?


Способ , при котором сообщения отправляются не окну, а самому потоку - см. PostThreadMesage.


Наверх

Титульная страница Поиск, карта сайта Написать письмо