[29-11-05]
test
test
Delphipedia - Delphipedia - TCanvas en Threading
Een Canvas heeft een aantal 'status' members , zoals Pen, Brush,Font en Penpos
Als het volgende stukje code door een andere Thread onderbroken wordt is de uitkomst waarschijnlijk niet wat gewenst is.
Als het volgende stukje code door een andere Thread onderbroken wordt is de uitkomst waarschijnlijk niet wat gewenst is.
ACanvas.Pen.Color := clBlack ACanvas.MoveTo(10,10); ACanvas.LineTo(90,90);
Het gebruik van PolyLine lijkt wel veiliger maar is dat in feite niet, ook deze method kan door een Thread onderbroken worden.
Het is in principe wel mogelijk om toegang een Canvas te regelen met een TCriricalSection maar zeker bij een scherm-canvas is dat toch heel gevaarlijk. Vaak zal de main-thread zo af en toe het Canvas willen gebruiken en deze thread kijkt niet naar Critical Section objecten.
De oplossing voor gebruik van een Canvas vanuit een thread is dan ook om deze door de main-thread uit te laten voeren door middel van TThread.Synchronize()
De Synchrinize method parkeert de procedure parameter (vergelijkbaar met een event) in een buffer en doet een PostMessage naar de meesage-queue van de applicatie. De main-thread zal dit message verwerken en dan de procedures uit de buffer uitvoeren.
Verwar de 'self' reference dus niet met de Thread-id
Het is in principe wel mogelijk om toegang een Canvas te regelen met een TCriricalSection maar zeker bij een scherm-canvas is dat toch heel gevaarlijk. Vaak zal de main-thread zo af en toe het Canvas willen gebruiken en deze thread kijkt niet naar Critical Section objecten.
De oplossing voor gebruik van een Canvas vanuit een thread is dan ook om deze door de main-thread uit te laten voeren door middel van TThread.Synchronize()
De Synchrinize method parkeert de procedure parameter (vergelijkbaar met een event) in een buffer en doet een PostMessage naar de meesage-queue van de applicatie. De main-thread zal dit message verwerken en dan de procedures uit de buffer uitvoeren.
Verwar de 'self' reference dus niet met de Thread-id