Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.03;
Скачать: CL | DM;

Вниз

Почему на 9910-ый проход циклом по этому коду система начинает   Найти похожие ветки 

 
kex86   (2002-09-20 01:47) [0]

Есть такой код:
rgnp:=CreateRectRgn(i,j,i+1,j+1);
combinergn(rgn,rgn,rgnp,rgn_diff);
rgn уже существует и имеет достаточные размеры.
Почему на 9910-ый проход циклом по этому коду система начинает по-тихоньку виснуть и выдавать сообщения (по-очереди):
"Canvas does not allow drawing" , кажется;
"Нехватает памяти для обработки команды"
"У окна нет полос прокрутки", что вообще никак с делом не связано
Почему так, я ведь использую только 2 переменные, они постоянно обновляются, я же не загружаю память {вроде}


 
MBo   (2002-09-20 01:50) [1]

А уничтожаешь созданные регионы?


 
kex86   (2002-09-20 01:59) [2]

1. Так они же заменяются самими собой, а виснит все до конца цикла
2. Пробовал, после цикла, не помогает
3. Пробовал даже использовать указатели: перед каждым циклом
new(rgnp), а после каждого-dispose(rgnp) - не помогает
правда я rgn не отчищал, но мне надо чтоб он сохранялся


 
MBo   (2002-09-20 02:08) [3]

каждому CreateRectRgn должно соответствовать DeleteObject
тысячи регионов gdi не потянет, тем более, очевидно, не простых прямоугольных, что следует из combinergn

new(rgnp) здесь ни к чему, только лишний указатель хранить.

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


 
kex86   (2002-09-20 02:12) [4]

Уже пробую


 
kex86   (2002-09-20 02:17) [5]

Работает!!! ждите новую прогу в кладовке (послезавтра ночью-еще оформить надо)
Большо-о-ой пасиб


 
kex86   (2002-09-20 02:26) [6]

хотя всё равно немного глючит


 
REA   (2002-09-20 10:18) [7]

Щас найду чего-нибудь из своего кода.
Ну что то вроде такого:

Function CombineRegions(Handle: HDC; L,T,R,B: Integer): HRGN;
Var Rgn: HRGN;
Begin
Result := CreateRectRgn(0,0,0,0); // Create empty region
Rgn := CreateRectRgn(L,T,R,B); // Create new region
Try
If (GetClipRgn(Handle,Result)<>1) Then // Save current region
Begin
DeleteObject(Result); // Delete old region
SelectClipRgn(Handle,Rgn); // Select new.
Result := 0; // No old region
End
Else ExtSelectClipRgn(Handle,Rgn,RGN_AND);// Combine with old
Finally
DeleteObject(Rgn); // Delete new
End;
End;

Так я и не понял - надо их удалять или нет. В MSDN явно не написано, но хуже не будет.


 
Anatoly Podgoretsky   (2002-09-20 10:25) [8]

kex86 © (20.09.02 02:17)
Ой не надо, потестируй хотя бы с полгодика


 
Карелин Артем   (2002-09-20 11:35) [9]

Все всегда надо удалять явно.


 
cypher   (2002-09-21 11:43) [10]

Вообще, такие моменты очень легко ловятся с помощью MemProof


 
kex86   (2002-09-22 02:03) [11]

да работает у меня уже, токо новые проблемы появились



Страницы: 1 вся ветка

Текущий архив: 2002.10.03;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.006 c
3-7859
pwlusa
2002-09-02 09:40
2002.10.03
Поговорим о запросах


1-7985
s.ts
2002-09-20 21:21
2002.10.03
Узнать запущена ли IDE


4-8232
Eugene_Jek_Efimochkin
2002-08-18 00:43
2002.10.03
перерисовка заголовка


3-7841
Aristarh
2002-09-10 17:20
2002.10.03
2NickBat: CM-это не Championship Manager?


4-8233
Lamer86
2002-08-16 11:07
2002.10.03
Как убрать программу с Toolbar





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский