Re: Обьекты Windows - удаление/освоброждение
От: Vamp Россия  
Дата: 10.02.04 07:09
Оценка: -2
Освобождать надо все, что ты создал.
Хотя скажу по секрету, неосвобождение объектов обычно не приводит к краху.
Да здравствует мыло душистое и веревка пушистая.
Re[2]: Обьекты Windows - удаление/освоброждение
От: AlexeyVodolazhsky Украина  
Дата: 10.02.04 07:33
Оценка: +1 :)
Здравствуйте, Vamp, Вы писали:

V>Освобождать надо все, что ты создал.

V>Хотя скажу по секрету, неосвобождение объектов обычно не приводит к краху.

Не приводит... если их не много...
Я несколько раз наблюдал прелюбопытнейшую картину — через приблизительно полчаса работы программы (активно работающей с графикой и потребляющей довольно много ресурсов) в Win98 сначала "слетала" графика (с 24-битного цвета на 256 цветов, а затем и на 16), затем шрифты заменялись на стандартный корявый системный шрифт. А затем программа просто вызывала исключение и завершалась. Операционке, правда, от этого легче не становилось Все дело было в том, что глубоко в недрах программы создавались GDI объекты (например, вызовами типа GetDC и т.д.), а потом не освобождались. В результате — происходила нехватка ресурсов и, как следствие, сбой всей системы.
Стоит отметить, что на NT системах подобного не происходило — приложение закрывалось с ошибкой, но система продолжала работать стабильно.

Так что, все ресурсы надо обязательно освобождать.
Re: Обьекты Windows - удаление/освоброждение
От: korzhik Россия  
Дата: 09.02.04 21:03
Оценка: 2 (1)
Здравствуйте, Аноним, Вы писали:

А>Вот ещё воопрос знатокам:

А>В каких случаях и какие объекты WinGDI нужно освобождать/удалять.
А>Желательно список.
А>
А>не хочу стать крахoм W9x

Все объекты, которые создаются API функциями CreateXXX, где XXX название объекта
Если используешь API, то удобна такая связка функций создания-удаления:

  HDC hDC;
  HPEN hOldPen = (HPEN)::SelectObject( ::CreatePen( PS_SOLID, 0, RGB(0,0,0) ) );
  //
  ::DeleteObject( ::SelectObject( hOldPen ) );
Re: Обьекты Windows - удаление/освоброждение
От: korzhik Россия  
Дата: 11.02.04 15:49
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

А>В каких случаях и какие объекты WinGDI нужно освобождать/удалять.


Добавление:

также надо удалять объекты GDI, хендлы которых вы получили
вызвав функции которые неявно создают их.
Например: LoadBitmap
Re[2]: Обьекты Windows - удаление/освоброждение
От: Andrew S Россия http://alchemy-lab.com
Дата: 10.02.04 07:28
Оценка: :)
V>Освобождать надо все, что ты создал.
V>Хотя скажу по секрету, неосвобождение объектов обычно не приводит к краху.

В win9х обычно приводит... I love windows!
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Обьекты Windows - удаление/освоброждение
От: Аноним  
Дата: 09.02.04 20:24
Оценка:
Вот ещё воопрос знатокам:
В каких случаях и какие объекты WinGDI нужно освобождать/удалять.
Желательно список.

не хочу стать крахoм W9x
Re[2]: Обьекты Windows - удаление/освоброждение
От: ToNIk_A_A Россия http://sinstr.ru
Дата: 11.02.04 13:19
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Все объекты, которые создаются API функциями CreateXXX, где XXX название объекта

K>Если используешь API, то удобна такая связка функций создания-удаления:

K>
K>  HDC hDC;
K>  HPEN hOldPen = (HPEN)::SelectObject( ::CreatePen( PS_SOLID, 0, RGB(0,0,0) ) );
K>  //
K>  ::DeleteObject( ::SelectObject( hOldPen ) );
K>


А какие обекты можно взять у W "напрокат"??
т.е. захватить и освободить, а не создать и удалить.
Сделать человеку приятное очень просто. Не сделайте ему гадость и ему будет приятно!
Баг — это клоп. Таpакан — это, видимо, фича.
Re[3]: Обьекты Windows - удаление/освоброждение
От: SergH Россия  
Дата: 11.02.04 15:29
Оценка:
Здравствуйте, ToNIk_A_A, Вы писали:

TNI>А какие обекты можно взять у W "напрокат"??

TNI>т.е. захватить и освободить, а не создать и удалить.

А в чём разница? Всё равно в одном случае надо удалять, в другом освобождать.
Делай что должно, и будь что будет
Re[3]: Обьекты Windows - удаление/освоброждение
От: korzhik Россия  
Дата: 11.02.04 15:44
Оценка:
Здравствуйте, ToNIk_A_A, Вы писали:

TNI>А какие обекты можно взять у W "напрокат"??

TNI>т.е. захватить и освободить, а не создать и удалить.

Напрокат можешь взять с помощью функции
HGDIOBJ GetStockObject( int fnObject);


DeleteObject(...)

можешь потом не вызывать, хотя если вызовешь,ничего страшного не случится

ну или можно ваще не вызывать ни каких функций для получения хендлов,
а можно так:


int FillRect( HDC hDC, CONST RECT *lprc, HBRUSH hbr );
...
FillRect(hdc, &rect, (HBRUSH)(COLOR_WINDOW+1));
Re[4]: Обьекты Windows - удаление/освоброждение
От: Mr.ToNik Россия http://sinstr.ru
Дата: 11.02.04 19:22
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Здравствуйте, ToNIk_A_A, Вы писали:


TNI>>А какие обекты можно взять у W "напрокат"??

TNI>>т.е. захватить и освободить, а не создать и удалить.

SH>А в чём разница? Всё равно в одном случае надо удалять, в другом освобождать.


это-то поятно!
А в каких случаях и какие обекты можно захватить, вот что меня интересует.
Сделать человеку приятное очень просто. Не сделайте ему гадость и ему будет приятно!
Баг — это клоп. Таpакан — это, видимо, фича.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.