Окна из разных thread-ов.
От: alvv  
Дата: 10.05.05 11:12
Оценка:
Привет!

Вот ситуация. Есть главное окно, у него есть два дочерних окна, одно из которых обрабатывается в другом thread-е. Дочерние окна перекрывают друг друга (что-то вроде реализации табов) и, при переключении, одно окно (с того же потока, что и главное) перерисовывается нормально, а второе (из другого потока) не всегда перерисовывается.
Переключаются они так:

    EnableWindow(off, FALSE);
    ShowWindow(off, SW_HIDE);
    ShowWindow(on, SW_SHOW);
    EnableWindow(on, TRUE);



Хочу, чтобы оба окна перерисовывались. Что я делаю не так?
Re: Окна из разных thread-ов.
От: BlackHeretic Израиль  
Дата: 10.05.05 11:19
Оценка:
Здравствуйте, alvv, Вы писали:

A>Привет!


A>Вот ситуация. Есть главное окно, у него есть два дочерних окна, одно из которых обрабатывается в другом thread-е. Дочерние окна перекрывают друг друга (что-то вроде реализации табов) и, при переключении, одно окно (с того же потока, что и главное) перерисовывается нормально, а второе (из другого потока) не всегда перерисовывается.

A>Переключаются они так:

A>
A>    EnableWindow(off, FALSE);
A>    ShowWindow(off, SW_HIDE);
A>    ShowWindow(on, SW_SHOW);
A>    EnableWindow(on, TRUE);
A>



A>Хочу, чтобы оба окна перерисовывались. Что я делаю не так?


Что значит "обрабатывается"? Создаются в разных потоках? Если да — то не надо так делать — создавать надо все окна в одном и том же потоке.
ICQ 156156278
Re[2]: Окна из разных thread-ов.
От: alvv  
Дата: 10.05.05 13:43
Оценка:
Здравствуйте, BlackHeretic, Вы писали:

BH>Что значит "обрабатывается"? Создаются в разных потоках? Если да — то не надо так делать — создавать надо все окна в одном и том же потоке.


Тоесть, нет возможность заставить эту конструкцию нормально работать (мне нужно создавать окно в другом потоке)?
Re[3]: Окна из разных thread-ов.
От: BlackHeretic Израиль  
Дата: 10.05.05 13:48
Оценка:
Здравствуйте, alvv, Вы писали:

A>Здравствуйте, BlackHeretic, Вы писали:


BH>>Что значит "обрабатывается"? Создаются в разных потоках? Если да — то не надо так делать — создавать надо все окна в одном и том же потоке.


A>Тоесть, нет возможность заставить эту конструкцию нормально работать (мне нужно создавать окно в другом потоке)?


Видите ли что происходит. Когда переключаетесь на таб из другого потока, по идее его нужно перерисовать, но управление сейчас у основного потока. То есть пока тот поток не получит свой квант времени — окошко не сможет перерисоваться. Еще я подозреваю, что во втором потоке генерится еще один WM_PAINT и скорее всего новый WM_PAINT выбрасывает из очереди старый (точно не знаю, но очень похоже на истину, да и логично).
Скажите в чем такая острая необходимость создавать окно именно в отдельном потоке?
ICQ 156156278
Re: Окна из разных thread-ов.
От: Danchik Украина  
Дата: 10.05.05 14:36
Оценка:
Здравствуйте, alvv, Вы писали:

A>Привет!


A>Вот ситуация. Есть главное окно, у него есть два дочерних окна, одно из которых обрабатывается в другом thread-е. Дочерние окна перекрывают друг друга (что-то вроде реализации табов) и, при переключении, одно окно (с того же потока, что и главное) перерисовывается нормально, а второе (из другого потока) не всегда перерисовывается.

A>Переключаются они так:

A>
A>    EnableWindow(off, FALSE);
A>    ShowWindow(off, SW_HIDE);
A>    ShowWindow(on, SW_SHOW);
A>    EnableWindow(on, TRUE);
A>



A>Хочу, чтобы оба окна перерисовывались. Что я делаю не так?


Тут все просто, поток, который владеет не перерисованным окном, сейчас чем то занят. Он не может именно в это время обработать WM_PAINT.
Каким то образом тебе нужно в другом потоке обрабатывать очередь другого потока. Насколько мне известно Windows не позволяет это сделать (исключение AttachThreadInput — но тут оно ничем не поможет)
Так что советую смирится...
Re[4]: Окна из разных thread-ов.
От: alvv  
Дата: 10.05.05 15:06
Оценка:
Здравствуйте, BlackHeretic, Вы писали:
BH>Скажите в чем такая острая необходимость создавать окно именно в отдельном потоке?

Образно: мне нужно было сделать так, чтобы второе окно (какой-бы код там не работал) не влиял на работу основного потока программы. Когда нужно, я бы прятал бы окно и создавал новое...

Но это в прошлом :)
Re: Окна из разных thread-ов.
От: alvv  
Дата: 10.05.05 15:07
Оценка:
Решение принято (один поток для окон). Спасибо всем, кто принимал участие в обсуждении!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.