· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Утечка в CreateSolidBrush?

Посл.отвђт Сообщенiе


Дата: Ноя 21, 2003 12:57:42 · Поправил: masquer

Есть такой код, он крутится в цикле, и, если task manager не врет, примерно на каждые 3-5 итерация одна кисть не освобождается.
...
invoke CreateSolidBrush, eax
push eax
invoke FillRect, dc, addr rect, eax
call DeleteObject ; здесь true всегда
...
Проблему утечки я хоть и решил другими средствами, но интересно, почему так происходит...


Дата: Ноя 21, 2003 13:19:39

Может быть GdiFlush после FillRect?


Дата: Ноя 21, 2003 13:26:54

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


Дата: Ноя 22, 2003 05:27:08

Теоретически все правильно.
У меня в программе на VB есть такая функция:

...
hBrush = CreateSolidBrush(&hFFFFFF)
Call FillRect(hDC, RECT, hBrush)
Call DeleteObject(hBrush)
...

Данная функция выполняется как минимум несколько раз в секунду. Программа работает по пол-часа без единого потерянного байта - никаких утечек нет.


Дата: Ноя 24, 2003 10:36:48

masquer
Наверно функция не глючит лучше обойтись без push eax
а сохранить дескриптор кисти во локальной переменной.


Дата: Ноя 24, 2003 10:56:12

Chib777
Смысл?


Дата: Ноя 24, 2003 11:03:44

q_q
invoke FillRect, dc, addr rect, eax
Может она стек изменяет, или затирает.


Дата: Ноя 24, 2003 11:08:44

Chib777
С чего бы это?
Так недолго и параноиком стать.


Дата: Ноя 24, 2003 12:02:28

Chib777
Мне это напомнило старый анекдот про то, как один ассемблерщик другому исходник показывает. Тот посмотрел и говорит:
- Слушай, а зачем у тебя идут подряд два jmp в одно и то же место? 8-|
- А вдруг первый не сработает! :)

Если бы FillRect стек портила, мы бы до сих пор в досе работали бы :)


Дата: Ноя 24, 2003 14:53:56

masquer
Ты прав.


Дата: Ноя 24, 2003 18:33:09

Chib777
Локальная переменная - тоже стек.

masquer
Я вспомнил про один старый DSP, у которого иногда не срабатывал loop на относительно коротких смещениях (-1, -2 и т.п.) и приходилось добавлять контрольный jmp или забивать нопами.


Дата: Ноя 24, 2003 19:28:42

Quantum

Дык таки это не параноя а реальность, блин теперь видимо придётся по
два jmp'а везде пихать :-)))
Это как у меня в Control'е вроде все символы фильтруются на прописные, а потом
бах... партизан такой проскочит в виде строчного 'f', даже не знаю, может
два раза вызывать проверочную функцию для пущей надёжности :-)


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.036