Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2008, 23:58   #1
Kernel_BuG
 
Регистрация: 24.09.2008
Сообщений: 4
По умолчанию Проблема немодального диалога в многопоточном приложении (Visual С++ 6 MFC Win32)

Решил я написать на Visual С++ 6 под Win32 многопоточную программу с полноценным оконным GUI с применением MFC.
Возникла проблема: когда из под второго потока (не интерфейсного) запускаю немодальное диалоговое окно, виснет весь GUI, только работает кнопка Х на родительском окне из под первого (интерфейсного) потока. Причем если запускать этот же диалог, но только из под первого потока, то все работает!
Решил эту проблему обойти: когда второму потоку нужно отобразить немодальное окно, он меняет глобальную переменную bool bCreateWindow = true, а обработчик в первом потоке мгновенно перехватывает это изменение и создает это окно.
Но окончательная проблема оказалась в том, что я не смог реализовать обработчик! Уже жалею, что начал писать (точнее написал прогу на 90%) под MFC, ибо они (мелкомягкие) запрятали основной хендлер приложения, куда бы я мог всунуть код своего обработчика.
Вобщем сначала кинул код в функцию OnPaint, но оказалось, что окно рендерится далеко не каждый такт микропроцессора. Затем решил перекроить WINCORE.CPP всунув обработчик в int CWnd::RunModalLoop(DWORD dwFlags), но походу выяснилось, что компилятору плевать что там написано в мфц хедерах (да, я изменил код, и когда начал дебаггить, узрел наинтереснейшую картину как дебаггер скакал между строк кода и выполнял что-то совершенно другое, чем там было написано, да и программа в итоге работала как бы я ничего не менял).
Фуф, спасибо за внимание, если это кого заинтересовало, пожалуйста отпишитесь по любой из этих проблем.

Последний раз редактировалось Kernel_BuG; 25.09.2008 в 00:00. Причина: Очепятки
Kernel_BuG вне форума Ответить с цитированием
Старый 26.09.2008, 09:59   #2
Kernel_BuG
 
Регистрация: 24.09.2008
Сообщений: 4
По умолчанию

Походу полазил по Визарду и обнаружил, что там есть класс приложения и можно переопределить функцию обработчика приложения Run(). =)))
WINCORE.CPP менять не нужно, но все-таки было бы интересно узнать почему когда вносишь изменения в эти хедеры, это не отражается на реальном коде приложения.
Kernel_BuG вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с файлом setup на visual basic. irbiss Помощь студентам 5 03.04.2008 15:41
Visual студия, проблема с листбоксами Jarik Общие вопросы .NET 0 28.02.2008 19:27
TBitmap в многопоточном приложении Sergey_nl Мультимедиа в Delphi 3 09.07.2007 00:34