Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Viele Threads mit VCL - aber wie? (https://www.delphipraxis.net/70665-viele-threads-mit-vcl-aber-wie.html)

mr47 2. Jun 2006 13:43


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:
type
  TMyThread = class(TThread)
  protected
    procedure Execute; override;
  end;
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...


Vielen Dank im Voraus
Gruß

mr47

Sascha L 2. Jun 2006 13:50

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;

generic 2. Jun 2006 13:52

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:
meineObjectList.add( tmeinthread.create(false) );
musst nur aufpassen wenn du freeonterminate verwendest das du den thread aus der liste nimmst.
sonst hast du nur einen zeiger ins nirvana.
^ bitte dran denken das du das entfernen geschützt tuts mit mutex/critsection oder sonstwie.

himitsu 2. Jun 2006 13:54

Re: Viele Threads mit VCL - aber wie?
 
zu dem Erhöhen ...
Delphi-Quellcode:
// z.B. um einen erhöhen
SetLength(ThreadArray, Length(ThreadArray) + 1);
ThreadArray[High(ThreadArray)] := TMyThread.Create;
oder
Delphi-Quellcode:
// z.B. um einen erhöhen
i := Length(ThreadArray);
SetLength(ThreadArray, i + 1);
ThreadArray[i] := TMyThread.Create;
{...}

mr47 2. Jun 2006 14:04

Re: Viele Threads mit VCL - aber wie?
 
Zitat:

Zitat von Sascha L
Du sprichst es doch schon an: Arrays.

Wieso machst du es dann nicht auch einfach?

Ja frag ich mich auch :mrgreen:
Zitat:

Zitat von Sascha L

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;

Okay so weit so gut. Klingt irgendwie logisch. Ich probiers jetzt einfach mal aus und melde mich dann noch mal bei Fehlern. Aber noch ne Frage: Wie kann ich einen Parameter übergeben? Und zwar sollte nachher jeder Thread einen anderen Wert übergeben bekommen.


Gruß und danke

mr47

Union 2. Jun 2006 14:10

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.

Sascha L 2. Jun 2006 14:11

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;

mr47 2. Jun 2006 14:24

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