🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi
Article #334562

Re: kto niszczy te bitmape ???

#334562
From: Arivald
Date: Tue, 03 Jan 2012 15:21
49 lines
2336 bytes
W dniu 2012-01-03 13:57, neuron pisze:
> mam funkcje
>
> function GetG:TBitMap;
> begin
>   try
>   // tu tworze okno ale go nie pokazuje F
>    result:= TBitMap.create;
>    result:= F.GetFormImage;
>   finally
>     F.free;
>   end;
> end;
>
>
>   w watku serwera http indy tworze jpega  i robie mu  jpeg.assign(getGr);
>
> Dziala prawidlowo ale co kilkaset, czasami kilka tysiecy wywolan (otwarte
> kilka przegladaek wiec tworzone sa czasem po 34 procesy)   robi end of
> resource albo AV albo blad socket  a pamiec powolutku cieknie - ale duzo
> duzo wolniej niz by to wynikalo z
> objetosci grafiki
>
> Czy nie jest niszczona bitmapa z result czy raczej bedzie to cos nie tak z
> wspolbieznoscia? Dodam ze nei mam w watku (zdarzeni CommandGet) zadnej
> sychchronizacji, zreszta nawet nie mam pewnosci czy indy robi oddzielny
> watek dla kazdego zaptyania ale sadzac po monitorze chyba tak.

Do wielu operacji na bitmapie niezbędny jest Canvas. Dla bitmapy jest to 
Tzw MemoryDC.

VCL ma optymalizację, że po obsłużeniu komunikatów zwalnia wszystkie 
MemoryDC (funkcja FreeMemoryContexts() ). Więc jeśli akurat wątek wtedy 
coś robil na tej bitmapie/jej canvasie, to masz AV i inne cuda.

Sposób jest prosty - zablokować canvas bitmapy na czas operacji w wątku:

     with TBitMap.Canvas do
     begin
       Lock()
       try
         operacje
       finally
         Unlock();
       end;
     end;

-- 
Arivald
Technical Details
Message-ID: <jdv6dj$9e3$1@news.dialog.net.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail
References: <jdutt9$562$1@mx1.internetia.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail
From: Arivald <arivald_@AT_interia_DOT_.pl>
Newsgroups: pl.comp.lang.delphi
Subject: Re: kto niszczy te bitmape ???
Date: Tue, 03 Jan 2012 16:21:25 +0100
Organization: Dialog Net
Lines: 51
Message-ID: <jdv6dj$9e3$1@news.dialog.net.pl>
References: <jdutt9$562$1@mx1.internetia.pl>
NNTP-Posting-Host: poczta.pgs-soft.com
Mime-Version: 1.0
X-Trace: news.dialog.net.pl 1325604083 9667 62.87.249.67 (3 Jan 2012 15:21:23 GMT)
X-Complaints-To: abuse@dialog.net.pl
NNTP-Posting-Date: Tue, 3 Jan 2012 15:21:23 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20111222 Thunderbird/9.0.1
In-Reply-To: <jdutt9$562$1@mx1.internetia.pl>
X-Stationery: 0.7.7
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit