Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];

Вниз

Почему на 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.008 c
3-7864
Vladimir*
2002-09-13 10:31
2002.10.03
Query глючит?


3-7849
Slava_BAZ
2002-09-13 07:09
2002.10.03
Отчёт из 3 таблиц?


7-8193
МИФИст
2002-07-25 21:30
2002.10.03
Как 2000 разогнать?


3-7860
REA
2002-09-11 16:52
2002.10.03
BatchMove


1-7918
Sergey Pavl
2002-09-23 18:39
2002.10.03
встроенный ассемблер





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский