RTL (3)

VCL (8)

Debugger (2)

Editor (3)

WIN32 (2)

Voorbeelden (2)

Object Pascal (1)


Over deze site

Nuttige Links


home

[29-11-05]







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.


  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



Threads  VCL