![]() |
Thread ausführen
Hallo,
ich beschäftige mich gerade mit Threads. Ich habe mir eine kleine Routine geschrieben, die ich ausführen lassen möchte. Da diese Routine ein bisschen Zeit in ansproch nimmt, habe ich mir überlegt das ganze in ein Thread zu packen. Leider funktioniert das nur manchmal. Könnt ihr mal draufschauen? Vielen Dank im vorraus.
Delphi-Quellcode:
Ausruf:
unit UThreads;
interface uses Classes, ExtCtrls, Windows; type TFarbe = record R : Integer; G : Integer; B : Integer; end; type TMyThread = class (TThread) private FImage : TImage; public protected procedure Execute(); override; published property Image : TImage Read FImage Write FImage; end; implementation procedure TMyThread.Execute(); var x, y : Integer; Farbe : TFarbe; begin for x:=0 to FImage.Width do begin for y:=0 to FImage.Height do begin Randomize; with Farbe do begin R:=Random(255); G:=Random(255); B:=Random(255); FImage.Canvas.Pixels[x, y]:=RGB(R, G, B); end; end; end; end; end.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var MyThread1 : TMyThread; MyThread2 : TMyThread; MyThread3 : TMyThread; MyThread4 : TMyThread; begin MyThread1:=TMyThread.Create(True); MyThread2:=TMyThread.Create(True); MyThread3:=TMyThread.Create(True); MyThread4:=TMyThread.Create(True); MyThread1.Image:=Image1; MyThread2.Image:=Image2; MyThread3.Image:=Image3; MyThread4.Image:=Image4; MyThread1.Resume; MyThread2.Resume; MyThread3.Resume; MyThread4.Resume; end; |
Re: Thread ausführen
Was heißt, "funktioniert nur manchmal"?
Und du weißt, dass man Zugriffe auf VCL-Elemente mit Synchronize synchronisieren muss? |
Re: Thread ausführen
Hallo,
nein das weiss ich nicht. Die geht das denn? Also ich meine das mit dem Syncen... Ja es funzt nur manchmal. Es bleiben immer wieder Images einfach nur weiss oder sie werden nur zur hälfte gezeichnet. MFG Chris |
Re: Thread ausführen
Warum nutzt du überhaupt ein TImage wenn du doch nur die TBitmap Instanz davon nutzt? Dann instanziiere lieber eine TBitmap Instanz innerhalb deines Threads und rufe mit einer durch Synchronize() synchronisierten Methode am Ende deiner Malroutine das übertragen des Bildes (nicht der Instanz, siehe
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz