Я пытаюсь использовать GetGuiResources
для поиска ресурсов графического интерфейса. используется моей программой. В качестве второго параметра принимает флаг. Мне интересно узнать разницу между GR_USEROBJECTS
и GR_GDIOBJECTS
. Я не мог найти никакой документации вокруг него. Кто-нибудь может объяснить, в чем между ними разница? Я также знаю, что по умолчанию одновременно может быть открыто не более 10 000 дескрипторов GDI. Учитывается ли значение, возвращаемое GR_GDIOBJECTS
, как часть этого ограничения в 10 КБ?
Использование API GetGuiResources WIn32
Ответы (1)
GR_USEROBJECTS — это объекты User32, окна и меню.
GR_GDIOBJECTS — это объекты Gdi32, такие как контексты устройств, шрифты, растровые изображения, курсоры, значки, кисти, перья, области, палитры, метафайлы, пути.
На самом деле очень мало смысла использовать GetGuiResources() в программе, эти значения легко видны в диспетчере задач. View + Select Columns и отметьте USER Objects и GDI Objects. Должна быть масса веб-страниц, рассказывающих об этих счетчиках.
Квота по умолчанию в 10 000 дескрипторов предназначена для каждого процесса. Существует ограничение на общее количество дескрипторов, созданных всеми процессами в сеансе, фоновый элемент здесь.
person
Hans Passant
schedule
27.06.2014
Спасибо за ваш ответ. Я пытаюсь выяснить утечку GDI в своем приложении и использую GetGuiResources для мониторинга использования. У меня есть еще один связанный вопрос. Имеет ли графический драйвер какое-либо отношение к утечкам GDI? т. е. может ли неисправный драйвер вызвать утечку GDI в моем приложении?
- person Naveen; 29.06.2014
Нет, драйвер устройства никогда не виноват. Утечка GDI — это чисто программная ошибка. Очень распространенная ошибка, если не считать того, что вы забыли освободить дескриптор с помощью соответствующей функции освобождения (их несколько), стандартная ошибка — забыть восстановить контекст устройства перед его уничтожением. Никогда не игнорируйте возвращаемое значение вызова SelectObject(), после этого потребуется еще один вызов SelectObject() для восстановления контроллера домена.
- person Hans Passant; 07.07.2014
Наконец-то разобрался с утечкой. Это было вызвано тем, что не были удалены дескрипторы растрового изображения, возвращенные вызовом
GetIconInfo()
.
- person Naveen; 16.07.2014