C ++ | Win32 API | Застрял на белом экране | InvalidateRect () [duplicate]

Не обрезайте [], и все должно быть в порядке. [] идентифицируют массив JSON, который именно то, что вам нужно, чтобы выполнять итерацию его элементов.

2
задан Jon Vance 17 September 2012 в 13:31
поделиться

3 ответа

Вероятно, у вас уже есть догадка о том, что это такое - вы отдаете его в первом предложении

... большое, сложное приложение ...

Похоже, что у вас где-то есть утечка ресурсов GDI. Чтобы подтвердить это, попробуйте найти в диспетчере задач объекты GDI для вашего процесса. В какой-то момент большинство операций GDI не будет выполнено для вашего приложения.

Убедитесь, что вы правильно освобождаете все дескрипторы. Обратите внимание, что для разных объектов GDI требуются разные способы освобождения объекта. Например, GetDC освобождается ReleaseDC, но CreateDC освобождается DeleteDC.

Вот почему интеллектуальные объекты RAII (например, интеллектуальные указатели) рекомендуются для управления ресурсами на C ++ (где освобождение управляется интеллектуальным объектом, чтобы уменьшить вероятность утечек и ошибок).

7
ответ дан tenfour 20 August 2018 в 14:48
поделиться
  • 1
    Я забыл о столбце GDI в диспетчере задач; Спасибо. Приложение, очевидно, просачивается несколькими объектами GDI здесь и там. С достаточным использованием, возможно, это может быть сложнее, чем я ожидал. Я подключу эти утечки и посмотрю, что говорит клиент (обновление для последующего использования). – Jon Vance 17 September 2012 в 20:58
  • 2
    Забыл вернуться и сказать так :( Это была проблема, и после подключения нескольких отверстий проблема решена. – Jon Vance 22 December 2012 в 00:22
  • 3
    Спасибо вам тоже. – William M. Rawls 12 June 2017 в 22:06

На ваше приложение может на самом деле страдать исключение, которое игнорируется. См. Microsoft KB статья 976038 .

0
ответ дан Neil 20 August 2018 в 14:48
поделиться
  • 1
    Молчаное игнорирование необработанных исключений SEH из обратного вызова не показывает поведения, которое описывает ОП. В конце концов, их приложение по-прежнему полностью функционально, за исключением обновления GUI. В подавляющем большинстве случаев это вызвано нехваткой ресурсов GDI. Вам нужно объяснить, почему реализация, описанная в статье KB, приведет к наблюдаемому поведению. – IInspectable 28 April 2018 в 14:47
  • 2
    @IInpectable К сожалению, я не могу вспомнить, что далеко назад, но я думаю, что мое приложение получало исключения в обратном вызове краски. – Neil 28 April 2018 в 16:33

Готов поспорить, что приложение теряет объекты GDI, а когда выделенное пространство GDI для этого процесса исчерпано, оно больше не может рисовать себя.

Вы можете проверить, так ли это в случае добавив в диспетчер задач Windows (или любой другой диспетчер процессов, такой как Process Monitor ) объекты GDI столбца и посмотрите, растет ли это число со временем.

2
ответ дан rodrigo 20 August 2018 в 14:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: