![]() |
|
|
![]()
|
|
| mrgloom |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
не могу детектировать ошибку или хотя бы понять откуда она идет.
Иногда приложение ведет себя странно, при наведении на кнопки панели управления они пропадают, все что на экране затирается и не перерисовывается. иногда при выводе например красных линий они вдруг почему то становятся черными. с чем могут быть связаны ошибки такого рода? как это можно отлаживать? делать дамп памяти вариант? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Может, GDI-ресурсы утекают? Других мыслей нет, только некорректная работа с ресурсами при перерисовке. Должно наблюдаться через некоторое время работы программы. Посмотреть можно через Диспетчер задач. На закладке с процессами включи столбец Объекты GDI и последи за его изменением у своего процесса. Нормальное поведение - сначала нарастает до какого уровня, затем колеблется туда-сюда (при прорисовках, например). Если все время растет - ищи ошибки некорректного освобождения GDI-ресурсов.
-------------------- ... |
|||
|
||||
| mrgloom |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
да, действительно посмотрел, копится, доходит до 10к и потом все начинает неправильно работать.
как то точнее можно отследить где происходит утечка? |
|||
|
||||
| mrgloom |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 8.6.2011 Репутация: нет Всего: нет |
похоже я не удалял пены.
HPEN yellowPen=CreatePen(PS_SOLID, 1, RGB(255,255,0)); HGDIOBJ oldPen=SelectObject(dc,yellowPen); DeleteObject(yellowPen);
не очень понятно зачем старый объект возвращать обратно? |
|||
|
||||
| Estranged |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 30.8.2010 Репутация: нет Всего: 3 |
Чтобы вернуть его на родину вместо удаляемого, причем все еще выбранного в текущий контекст, иначе будет плохо:
или:
|
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Другими словами, объект, выбранный в контекст, на самом деле не удаляется. Это одна из самых больших засад GDI, которые нужно иметь в виду при написании кода. "Развыбрать" объект можно одним способом - заменить другим такого же типа. Не обязательно старым, для этих целей подходят также stock-объекты. -------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |