![]() |
Viele Threads mit VCL - aber wie?
Hallo!
Ich steh grad irgendwie ziemlich auf der Leitung! Ich brauch für ein Projekt Threads. Ich will das mit TThread, also der VCL, lösen. Ich weiß vorher nicht wie viele Threads während der Laufzeit benötigt werden, deshalb will ich das ganze dynamisch aufbauen. Nur wie kann ich denn mehrere Threads dynamisch erstellen? So mach ich einen Thread (unten natürlich noch die "procedure Execute").
Delphi-Quellcode:
Jetzt würd ich das aber gern nach Möglichkeit in ein Array packen. Kann mir jemand en bisschen auf's Pferd helfen? Ich programmiere das erste mal mit Threads...
type
TMyThread = class(TThread) protected procedure Execute; override; end; Vielen Dank im Voraus Gruß mr47 |
Re: Viele Threads mit VCL - aber wie?
Du sprichst es doch schon an: Arrays.
Wieso machst du es dann nicht auch einfach?
Delphi-Quellcode:
var
ThreadArray: array of TMyThread; // Initialisieren SetLength(ThreadArray,0); // z.B. um einen erhöhen SetLength(ThreadArray,Length(ThreadArray)+1); // Alle Threads z.B. erstellen for i:=0 to Length(ThreadArray)-1 do begin ThreadArray[i] := TMyThread.Create; {...} end; |
Re: Viele Threads mit VCL - aber wie?
thread sind in der regeln nach dem fire and forget prinzip.
warum brauchst du die in einem array? um freizugeben? nein - freeonterminiate um feedback zu bekommen? nein, weil onTerminiate oder per syncronize(bla) die gui aktuallisieren. ansonsten kannst du natuerlich jeden thread den einer liste/array verwalten.
Delphi-Quellcode:
musst nur aufpassen wenn du freeonterminate verwendest das du den thread aus der liste nimmst.
meineObjectList.add( tmeinthread.create(false) );
sonst hast du nur einen zeiger ins nirvana. ^ bitte dran denken das du das entfernen geschützt tuts mit mutex/critsection oder sonstwie. |
Re: Viele Threads mit VCL - aber wie?
zu dem Erhöhen ...
Delphi-Quellcode:
oder
// z.B. um einen erhöhen
SetLength(ThreadArray, Length(ThreadArray) + 1); ThreadArray[High(ThreadArray)] := TMyThread.Create;
Delphi-Quellcode:
// z.B. um einen erhöhen
i := Length(ThreadArray); SetLength(ThreadArray, i + 1); ThreadArray[i] := TMyThread.Create; {...} |
Re: Viele Threads mit VCL - aber wie?
Zitat:
Zitat:
Gruß und danke mr47 |
Re: Viele Threads mit VCL - aber wie?
Hallo,
entweder Du erweiterst Dein Create oder Du bildest Felder die Du zwischen den Aufrufen von CreateSuspended und Resume füllst. |
Re: Viele Threads mit VCL - aber wie?
Delphi-Quellcode:
type
TMyThread = class(TThread) private fValue : String; // z.B. ein String -> oder unter Public protected procedure Execute; override; public constructor Create(Bla: String; Suspended: Boolean); override; // z.B. ein String end; {...} constructor TMyThread.Create(Bla: String; Suspended: Boolean); begin fValue := Bla; inherited(Suspended); end; |
Re: Viele Threads mit VCL - aber wie?
Okay ich glaub ich hab's verstanden! Ich danke euch allen herzlich! Bei Unklarheiten meld ich mich nochmal :wink:
:hi: mr47 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16: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 by Thomas Breitkreuz