Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Странным образом зависает приложение [Delphi, Windows]


Sheleh   (12.11.20 20:11

Небольшой экскурс в приложение.

В общем данное приложение является клиентом типа Гис скады. Движок отображения тайловых карт, самописный. Плюс выводит графики параметров датчиков подключенных устройств, плюс отчеты. VCL практически не используется.

Основной интерфейс состоит из единого окна, но я виртуально нарисовал и другие типа окна (список объектов и окно вывода графиков). Но по сути этот интерфейс я просто рисую в растре и отображаю на чистой KOL форме не используя вообще никаких компонентов. Просто работаю с событиями.

И вроде бы все работает, но спустя какое то время в приложении что то происходит, и оно перестает частично реагировать на сообщения. То есть часть формы отображается. Именно та часть, которая изображает список объектов. И эти объекты скролятся, тоесть принимается сообщение WM_Mousewheel и все рисуется на WM_PAINT. Но другая часть вообще не реагирует на поведение мыши, и изображение не обновляется. Хотя вроде все в одном потоке.

Что еще характерно, после этого глюка сбрасываются шрифты на стандартные. Для вывода текста я использую TextOut. А перед этим всегда указывается тип шрифта и размер. В моем коде шрифт никак не должен меняться.

Этот глюк вообще уму непостижим. Встроенный отладчик подвоха не видит. Но такое ощущение, что происходит какая то утечка и/или переполнение буфера.

Как вообще отслеживаются такие глюки?

Кстати. Несколько лет назад я писал тоже большое приложение с использованием KOL и сей час я вспомнил, что и там наблюдалось подобное поведение, когда приложение вроде бы и не падает, но все равно частично перестает обрабатывать сообщения ОС. Тогда я так ничего не решил.


Vladimir Kladov ©   (13.11.20 18:57[1]

С большой вероятностью идет утечка ресурсов gdi. Нет. С очень большой. Проверьте, что все освобождаете, что выделили. Delphi не будет за вами чистить мусор. И KOL здесь с не при чем. Найдите FastMM4 или 3 или используйте MemProof для поиска утечек. Или просто посмотрите внимательно свой код. Добавьте счетчики созданных/прибитых битмапов. Выведите в логи. Просто отладчиком убедитесь, что деструкторы вызываются.


Sheleh   (14.11.20 12:43[2]

Слушайте! Огромное спасибо! Я непрерывно вызываю GetDC и не высвобождаю дескриптор. В конце концов система перестает мне его предоставлять. Добавил ReleaseDC теперь все работает.


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо