Здравствуйте, Blabla, Вы писали:
B>1)С помощью мастера создаем проект-диалог B>2)Создаем в ресурсах еще один диалог с ID=IDD_DLG2 B>3)На сгенерированном мастером диалоге (при создании проекта) кидаем кнопку и создаем обработчик нажатия этой кнопки B>4)В обработчике этой кнопки пишем следующий код:
B>CDialog dlg(IDD_DLG2); B>dlg.DoModal();
B>Кто нибудь может это объяснить? B>И можно от этого как-нибудь избавиться?
В MSDN подобная проблема упоминается в KB309121 "BUG: Nested Dialog Boxes Leak Memory" и KB839859 "Temporary MFC objects may not be deleted in Windows CE Platform Builder". Там читаем, что "Desktop Windows MFC uses idle processing time to clean up the memory that is used by these temporary objects."
Поскольку вы все время жмете Enter, то OnIdle не вызывается и MFC не получает возможности очистить память. Отпустите кнопку, и все будет хорошо.
Я ниче не понимаю....
Неужели никто не замечал никогда как течет память при работе с диалогами?
Привожу пример:
1)С помощью мастера создаем проект-диалог
2)Создаем в ресурсах еще один диалог с ID=IDD_DLG2
3)На сгенерированном мастером диалоге (при создании проекта) кидаем кнопку и создаем обработчик нажатия этой кнопки
4)В обработчике этой кнопки пишем следующий код:
CDialog dlg(IDD_DLG2);
dlg.DoModal();
5)Запускаем приложение
6)Запускаем диспетчер задач, и находим наш процесс
7)Теперь в запущенном нашем приложении устанавливаем фокус на кнопку и зажимаем Enter. В результате дилог IDD_DLG2 будет появляться и исчезать, появляться и исчезать, появляться и исчезать....
8)Теперь смотрим в диспетчер задач. Память выдялемая под наш процесс постоянно УВЕЛИЧИВАЕТСЯ!
Что за хрень?
Кто нибудь может это объяснить?
И можно от этого как-нибудь избавиться?
Здравствуйте, Blabla, Вы писали:
B>Я ниче не понимаю.... B>Неужели никто не замечал никогда как течет память при работе с диалогами?
B>Привожу пример: B>1)С помощью мастера создаем проект-диалог B>2)Создаем в ресурсах еще один диалог с ID=IDD_DLG2 B>3)На сгенерированном мастером диалоге (при создании проекта) кидаем кнопку и создаем обработчик нажатия этой кнопки B>4)В обработчике этой кнопки пишем следующий код:
B>CDialog dlg(IDD_DLG2); B>dlg.DoModal();
B>5)Запускаем приложение B>6)Запускаем диспетчер задач, и находим наш процесс B>7)Теперь в запущенном нашем приложении устанавливаем фокус на кнопку и зажимаем Enter. В результате дилог IDD_DLG2 будет появляться и исчезать, появляться и исчезать, появляться и исчезать....
B>8)Теперь смотрим в диспетчер задач. Память выдялемая под наш процесс постоянно УВЕЛИЧИВАЕТСЯ!
B>Что за хрень? B>Кто нибудь может это объяснить? B>И можно от этого как-нибудь избавиться?