C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
почему можно двигать окно, когда поток интерфейса висит
Tertium
Отправлено: 03.11.2006, 13:43


Машинист паровоза

Группа: Почетный участник
Сообщений: 192



народ, такой вопрос: у меня запускается операция занимающая длит. время, в потоке интерфейса, перед этим делается визибл тру окошку на котором прогресс. операция представляет собой цикл, в котором задается прогрессу валуе и лабелу на окне капшн, и вызываются апдейты иногда окна и лабела.
так вот — запуская из среды получаю нормальное висящее приложение, периодически обновляется прогресс и надпись, т.е. все ОК.
Но без среды, просто запуская дебагный экзешник — такая странная вещь — можно подвигать окно, в то время как поток интерфейса по идее висит !!! при этом уже не обновляется лабел и прогресс, мало того потом и Visible = false действует не сразу на окно, оно прячется через минуту или около того. Такое впечатление, что эти сообщения мыши рвут очередь сообщений вцл. Кто нибудь может прокомментировать?
Doga
Отправлено: 04.11.2006, 14:52


Мастер участка

Группа: Участник
Сообщений: 575



Что значит
QUOTE

поток интерфейса по идее висит

?

Это отдельный поток в приложении? Он в это время Suspended или всё-таки работает но ничего не делает?

Application->ProcessMessages() пробовали?
Tertium
Отправлено: 08.11.2006, 22:08


Машинист паровоза

Группа: Почетный участник
Сообщений: 192



висит — значит занят глухим циклом, суспендед — это не висит, это приостановлен

за Application->ProcessMessages() спасибо, посмотрю

НО: вопрос не в том, что висит. Висит и висит, это нормально в данном случает, но непонятно, почему когда без среды запускаю и посреди этого висения сдвигаю окно мышью — он резко прерывает цикл, окно сдвигать дает и после этого все обращения к окну безрезультатны (Visible = false и типа того)
Doga
Отправлено: 09.11.2006, 13:07


Мастер участка

Группа: Участник
Сообщений: 575



А Synchronize исползуется для обновления окна?

Может быть, у потока слишком большой приоритет...
olegenty
Отправлено: 09.11.2006, 14:46


Ветеран

Группа: Модератор
Сообщений: 2412



это такая фича XP, бороться с ней бесполезно. ещё в Win2000 всё было в порядке, а в XP при зависшей очереди почему-то окно доступно для движения.

Вернуться в Вопросы программирования в C++Builder