Поток
, проблема с Handle и чем-то там еще...
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.14] |
|
|
ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Поток
, проблема с Handle и чем-то там еще...
|
Сообщ.
#1
,
|
|
|
|
Доброго времени суток!
Не судите строго, только недавно начал активно использовать потоки, и тут же наткнулся на проблему( Я не могу понять почему, если поток внутри себя начинает изменять какие-либо визуальные свойства вроде Visible на компонентах формы, то она в последствии может неправильно обрисовываться, а одно только дальнейшее прикосновенее к ней мышью сразу порождает ошибки вроде: Error creating window device context Invalid Window Handle Я примерно догадываюсь что основной поток конфликтует с тем, который я создал, но можно ли как-нибудь обойти такие ошибки? |
|
Сообщ.
#2
,
|
|
|
|
Почитай про Synchronize
|
|
Сообщ.
#4
,
|
|
|
|
Synchronize не помогает?
|
|
Сообщ.
#5
,
|
|
|
|
Прямо наперегонки отвечаем!
|
|
Сообщ.
#6
,
|
|
|
|
и я опять последний
|
|
Сообщ.
#7
,
|
|
|
|
Дело в том, что VCL - принципиально однопоточная библиотека и выполнять действия над визуальными компонентами в контексте неглавного потока запрещено - эффекты могут быть самые разнообразные
Однако разработчики включили в класс TThread метод Syncronize, который приводит к тому, что переданный параметром метод будет выполнен именно в контексте основного потока (но не сразу, а когда у того будет на это время). А вызывающий поток в этом случае приостановится до тех пор, пока основной не выполнит поставленную перед ним задачу. Из этого следует, что под Syncronize нужно заносить лишь небольшие фрагменты кода, которые по тем или иным причинам должны быть выполнены именно основным потоком (например, обращение к визуальным компонентам), но ни в коем случае не весь код потока (как это рекомендуется в некоторых книгах, у Архангельского в частности), так как в этом случае смысла в потоке нет - он все время будет только ждать, но сам - ничего не делать. |
|
Сообщ.
#8
,
|
|
|
|
Спасибо, теперь все встало на свои места
|