![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| yngwie19 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Всем привет, у меня вот такой вопрос.
1) Нужно ли после создания кисти ее самостоятельно уничтожать? например:
2) Нужно ли после изменения в контексте дисплея сохранять шрифт по умолчанию, для последующего его возврата в контекст, или винда опять все сделает сама и нам об этом беспокоиться не стоит. Например:
Вот здесь в предпоследней строчке обязательно делать возврат начального шрифта или нет? Это сообщение отредактировал(а) yngwie19 - 10.1.2009, 22:43 |
||||
|
|||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
если после закрытия окна завершается процесс то все удалится само
|
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
GoldFinch, а по поводу второго вопроса? про возврат шрифта в контекст дисплея, чего сказать можете
|
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Да возвращай.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Dem_max, Можешь объяснить почему?
|
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 2 Всего: 110 |
я бы очень сильно порекомендовал удалить хотя бы по той причине, что всё, что выделено/открыто нужно освобождать/закрывать в частности, в будущем может появиться потребность создавать и удалять много экземпляров таких окон, и если они не будут за собой убирать, получится утечка, а утечка GDI-объектов иногда имеет более неприятные последствия, чем, например, утечка памяти кроме того, я бы посоветовал уменьшать время жизни объекта как можно сильнее, пока это не приводит к заметному снижению производительности т.е. в данном случае создавать кисть, когда она нужна, и удалять сразу после использования а то если каждое приложение будет создавать всё, что когда-нибудь может понадобиться, при старте и освобождать при завершении, GDI-объектов может банально не хватить на всех... -------------------- qqq |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
maxim1000, ExitProcess() удалит все хендлы, о какой утечке ресурсов речь?
кстати, какое максимальное число GDI-объектов? Это сообщение отредактировал(а) GoldFinch - 11.1.2009, 12:23 |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 2 Всего: 110 |
речь идёт о такой ситуации: при создании окна создаётся GDI-объект, при уничтожении не удаляется в процессе исполнения программы окна создаются и удаляются много раз (например, что-то типа MessageBox своего) в таком случае количество созданных, но не удалённых GDI-объектов будет увеличиваться с каждым созданием такого окна судя по MSDN, оно зависит от доступных ресурсов кроме того есть возможность ограничить количество для процесса (но там лимит не меньше 256 должен быть), тогда есть шанс избежать неприятной ситуации, когда из-за одной программы с ошибкой начинают страдать все остальные -------------------- qqq |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Любая нетривиальная программа, работабщая с GDI, для прорисовки создает свои объекты; причем заранее все создать просто невозможно, т.к. неизвестно, что именно может потребоваться. Пример: вывод каких-то объектов, каждый из которых имеет свой цвет (назначаемый пользователем). И если ты будешь только создавать, то минут через 10 работы программы все у тебя станет беленькое и страшненькое ... Утечка ресурсов - очень неприятная вешь. Так что слушай maxim1000 и приучайся всегда аккуратно подчищать за собой. Кстати, имей в виду, что если ты удалишь объект, выбранный в контекст, он на самом деле не удалится. Так что здесь тоже нужно быть аккуратным.
С шрифтами тоже самое: сам создал - сам удаляй. Насчет того, восстанавливать контекст или нет, завист от типа контекста. Бывают контексты временный (и лично для объекта созданные). Тогда, даже если ты не восстановишь старый объект, он восстановится сам (т.к. при следующем заходе контекст будет ре-инициализирован), но тогда смотри пункт 1 (насчет утечек). Но бывают контексты общие, используемые совместно несколькими окнами. Тогда, сам понимаешь, оставленный тобою мусор может помешать работе в другом месте. Самый правильный подход - не зависеть от этого. Т.е. при каждом заходе в Paint все настраивать с нуля, а потом все восстановить. Это проще всего сделать одним махом - есть функция Save\RestoreDCState. Кстати, под этим "все" можно понимать также режимы прозрачности, цвет фона\текста и т.д., а не только объекты. -------------------- ... |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Earnest, Спасибо за грамотный ответ
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |