У меня странная проблема, которую я не смог диагностировать, и я надеюсь, что кто-то может, по крайней мере, указать мне правильное направление. У меня есть приложение C ++ MFC, которое собирает данные из различных источников и отображает их на экране. Однако после случайного интервала (обычно около 5-10 минут) дисплей «повреждается» так, как я никогда не видел или не смог отследить, как показано на рисунке ниже (слева — нормально, справа — повреждено). ):
Основные симптомы:
Вещи, которые я пытался устранить в качестве возможной причины, включают в себя:
Любые идеи о том, что может быть причиной или как сузить это было бы здорово.
Обновление 1:
Выполнение некоторых временных / повторяемых тестов, и похоже, что это ненадолго запустило одно диалоговое окно, что вызывает проблему. Время показа составляет от 300 до 400 секунд до появления проблемы.
Похоже, что ваше приложение может пропускать объекты GDI. Чтобы проверить, так ли это, откройте диспетчер задач и включите GDI Objects
колонка. Наблюдайте за числом для вашего процесса и посмотрите, будет ли он постоянно расти.
Если это действительно так, вы должны прочитать Обнаружение и устранение утечек GDI в вашем коде с помощью двух мощных инструментов для Windows XP. Эта статья MSDN также предлагает инструмент под названием GDILeaks.exe
это должно помочь вам определить ваши утечки GDI.
В случае, если эти симптомы появляются в течение короткого времени, это должно быть что-то, что обращается многократно, что не освобождает ресурсы GDI должным образом. Возможно в (или вызванной в) процедуре Windows (например, OnPaint).
Если я не ошибаюсь, Windows GUI использует шрифт ttf (?) Для этих маленьких иконок, и похоже, что шрифт как-то разрушается (DeleteObject вызывается с дескриптором шрифта?)