CDialog в потоке
От: ahaos  
Дата: 10.01.16 09:51
Оценка:
Имеется приложение, которое создает поток.
В этом потоке создается модальный диалог, который вызывается функцией Domodal.
До вызова этой функции в основную программу, создавшую поток, передается указатель на созданный диалог,чтобы она могла выводить туда сообщения лога.
Проблема в том, что при выводе первого сообщения в этот диалог основной программой вылетает ошибка.
Это связано с тем, что еще не закончились все процедуры создания диалога в потоке. Как узнать, что создание и отображение диалога закончилось и в него можно выводить информацию?
Re: CDialog в потоке
От: VladFein США  
Дата: 11.01.16 17:46
Оценка:
Здравствуйте, ahaos, Вы писали:

A>До вызова этой функции в основную программу, создавшую поток, передается указатель на созданный диалог,чтобы она могла выводить туда сообщения лога.

*КАК* программа выводит сообщения лога в этот диалог?

A>Это связано с тем, что еще не закончились все процедуры создания диалога в потоке. Как узнать, что создание и отображение диалога закончилось и в него можно выводить информацию?

А точно прпблема в этом? Диалоговый объект уже создан, можно им пользоваться.
Даже если UI ещё не готов, диалог может сохранить те сообщения и показать, когда сможет.
Не предлагаете же Вы главному потоку ждать пока логгер будет готов???
Re: CDialog в потоке
От: MasterZiv СССР  
Дата: 14.01.16 12:45
Оценка: +3
Здравствуйте, ahaos, Вы писали:


A>Имеется приложение, которое создает поток.

A>В этом потоке создается модальный диалог, который вызывается функцией Domodal.
A>До вызова этой функции в основную программу, создавшую поток, передается указатель на созданный диалог,чтобы она могла выводить туда сообщения лога.
A>Проблема в том, что при выводе первого сообщения в этот диалог основной программой вылетает ошибка.
A>Это связано с тем, что еще не закончились все процедуры создания диалога в потоке. Как узнать, что создание и отображение диалога закончилось и в него можно выводить информацию?

Синхронизироваться на потоке, управляющем диалогом.

НО на самом деле это -- нерабочая схема, и ненужная для приложения.
Переделывай наоборот -- все окна в главном потоке приложения, если что-то надо обрабатывать -- в фоновом/рабочем потоке.
Re: CDialog в потоке
От: Went  
Дата: 09.02.16 08:36
Оценка:
Здравствуйте, ahaos, Вы писали:
Можете сделать через посылку асинхронного сообщения на хэндл окна диалога. Когда диалог в служебном потоке будет создан, он выгребет сообщение из своей очереди и добавит что надо. Это защитит вас от любых накладок связанных с временем жизни или валидностью оного.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.