Delphi Тема заморозить - PullRequest
       7

Delphi Тема заморозить

2 голосов
/ 04 февраля 2010

Я кодирую приложение службы, которое имеет два потока.Первая тема, показать форму с меткой.Второй поток, запрос ADO.

Первый поток всегда зависает с курсором песочных часов и без заголовка метки.

Пожалуйста, помогите.

Ответы [ 2 ]

4 голосов
/ 04 февраля 2010

Если вы пытаетесь показать форму из потока, который не основной поток, то вы столкнетесь с такими странными вещами, как эта. Наиболее заметным из них является то, что если форма и метка создаются в неосновном потоке, то у вас нет цикла обработки сообщений. Если форма была создана в главном потоке, но вы пытаетесь показать ее из неосновного потока, то, скорее всего, это мертвая блокировка из-за того, как Windows обрабатывает сообщения и потоки.

Когда дескриптор окна создается, он привязывается к потоку, в котором он был создан. Это означает, что Windows будет гарантировать, что любые сообщения, отправленные этому дескриптору, будут обработаны в этом потоке.

Я настоятельно рекомендую вам прочитать о том, как сообщения окон, очереди сообщений и дескрипторы взаимодействуют и функционируют в многопоточной среде. Если все сделано неправильно, вы уверены в каком-то очень странном и, возможно, непредсказуемом поведении.

0 голосов
/ 10 февраля 2010

Я бы назвал ваше состояние гонкой, тупиком или какой-то другой ошибкой в ​​этом роде. Как говорит Аллен, если фоновый поток делает ЛЮБОЙ прямой доступ к элементам управления VCL, без использования TThread.Synchronize (myMethod) для вызова myMethod, который касается вашего переднего плана VCL, то это само по себе вызовет ваши проблемы.

Опубликуйте дополнительную информацию, включая образец кода, пожалуйста.

...