Поиск:

Ответ в темуСоздание новой темы Создание опроса
> непонятная ошибка 
:(
    Опции темы
mrgloom
Дата 21.10.2011, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



не могу детектировать ошибку или хотя бы понять откуда она идет.

Иногда приложение ведет себя странно, при наведении на кнопки панели управления они пропадают, все что на экране затирается и не перерисовывается.
иногда при выводе например красных линий они вдруг почему то становятся черными.

с чем могут быть связаны ошибки такого рода? как это можно отлаживать? делать дамп памяти вариант? 
PM MAIL   Вверх
Earnest
Дата 21.10.2011, 13:35 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Может, GDI-ресурсы утекают? Других мыслей нет, только некорректная работа с ресурсами при перерисовке. Должно наблюдаться через некоторое время работы программы. Посмотреть можно через Диспетчер задач. На закладке с процессами включи столбец Объекты GDI и последи за его изменением у своего процесса. Нормальное поведение - сначала нарастает до какого уровня, затем колеблется туда-сюда (при прорисовках, например). Если все время растет - ищи ошибки некорректного освобождения GDI-ресурсов.


--------------------
...
PM   Вверх
mrgloom
Дата 21.10.2011, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



да, действительно посмотрел, копится, доходит до 10к и потом все начинает неправильно работать.


как то точнее можно отследить где происходит утечка?
PM MAIL   Вверх
mrgloom
Дата 21.10.2011, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



похоже я не удалял пены.


HPEN yellowPen=CreatePen(PS_SOLID, 1, RGB(255,255,0)); 
HGDIOBJ oldPen=SelectObject(dc,yellowPen);
DeleteObject(yellowPen);

Цитата

This function returns the previously selected object of the specified type. An application should always replace a new object with the original, default object after it has finished drawing with the new object.


не очень понятно зачем старый объект возвращать обратно?
PM MAIL   Вверх
Estranged
Дата 21.10.2011, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 30.8.2010

Репутация: нет
Всего: 3



Цитата(mrgloom @  21.10.2011,  17:09 Найти цитируемый пост)
не очень понятно зачем старый объект возвращать обратно? 

Чтобы вернуть его на родину вместо удаляемого, причем все еще выбранного в текущий контекст, иначе будет плохо:
Код

HPEN yellowPen=CreatePen(PS_SOLID, 1, RGB(255,255,0)); 
HGDIOBJ oldPen=SelectObject(dc,yellowPen);
SelectObject (dc, oldPen); <--------
DeleteObject(yellowPen);


или:
Код

HPEN yellowPen=CreatePen(PS_SOLID, 1, RGB(255,255,0)); 
HGDIOBJ oldPen=SelectObject(dc,yellowPen);
DeleteObject(SelectObject (dc, oldPen));

PM MAIL   Вверх
Earnest
Дата 24.10.2011, 06:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(Estranged @  21.10.2011,  22:51 Найти цитируемый пост)
 иначе будет плохо

Другими словами, объект, выбранный в контекст, на самом деле не удаляется. Это одна из самых больших засад GDI, которые нужно иметь в виду при написании кода. "Развыбрать" объект можно одним способом - заменить другим такого же типа. Не обязательно старым, для этих целей подходят также stock-объекты.


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1099 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.