Problem with GDI objects.
4 отговора
155 прегледа
Problem with GDI objects.
Пиша десктоп приложение с Visual C++, SDI тип, с няколко изгледа, управлявани чрез сплитери. Проблемите са в единия изглед, където съм поставил трее-контрол, лист-контрол и няколко радио-бутона. При промяна размера на изгледа (също и на прозореца-рамка), при движение на мишката върху радио-бутоните и трее-контрола, както и при селектиране на елемент от трее-контрола Windows Task Маnager показва лавинообразно нарастване на броя на GDI-обектите, използвани от приложението. И когато тези обекти достигнат 10000, програмата се проваля с гръм и трясък. Трасирах внимателно всички мои функции, чертаещи нещо, както и тези, заделящи ресурси, за да се уверя, че на изхода им всичко е както трябва.
Как мога да разбера причината за това лавинообразно нарстване? Никъде не използвам new, т.е. причината не може да е евентуално забравен delete.
Как мога да разбера причината за това лавинообразно нарстване? Никъде не използвам new, т.е. причината не може да е евентуално забравен delete.
Re: Problem with GDI objects.
nameri speshno BoundsChecker - shte ti pomogne w namiraneto na GDI leakove.
tirulirutatuutuu
tirulirutatuutuu
Re: Problem with GDI objects.
В такива случаи се казва: "Проекта съм го ъплоаднал ето тук". Така задочно никой няма да може да ти помогне.
Я вышел им наперерез!
Я вышел им наперерез!
Re: Problem with GDI objects.
A ne chertaiesh li ti samia neshto, da rechem ot miasto deto prihvashtash OnLButtonClick() ili ne dai boje v OnMouseMove(), zaemaiki resourci? I da si napravil CDC *pMyDC = GetDC() .. a posle da si zabravil da napishesh pMyDC->Release(). Ili puk da si Create-val razni HANDLE hMyBrush, hMyBitmap .. i da si zabravil da gi DeleteObject(hMyBrysh) ?
Tova a nai-tupata greshka, koiato vseki pravi. Proveri. Dano ne sum ti kazal neshto staro :)
Tova a nai-tupata greshka, koiato vseki pravi. Proveri. Dano ne sum ti kazal neshto staro :)
Re: Problem with GDI objects.
абе pMyDC->Release() не е толкова фатално - аз съм го забравял и компота забива чак след много време. а и CDC не е gdi обект. но може да е направил някой бруш и да е забравил да върне след това взетия от SelectObject указател обратно. обаче мен повече ми мяза на рекурсивно зацикляне, ако правилно съм разбрал - той казва дори при ресайзване се дъни. като че ли OnDraw е зациклена някак. моят съвет е: проследи дали косвено не се вика сама. така ако не използваш new а само локални инстанции то рекурсията ще предизвика безкрайно нарастване на броя на gdi обектите.