AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Viele Threads mit VCL - aber wie?

Ein Thema von mr47 · begonnen am 2. Jun 2006 · letzter Beitrag vom 2. Jun 2006
Antwort Antwort
Benutzerbild von mr47
mr47

Registriert seit: 6. Dez 2004
Ort: Stuttgart
644 Beiträge
 
Delphi 2005 Personal
 
#1

Viele Threads mit VCL - aber wie?

  Alt 2. Jun 2006, 13:43
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
  Mit Zitat antworten Zitat
Sascha L

Registriert seit: 4. Jun 2004
Ort: Hamm
390 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Viele Threads mit VCL - aber wie?

  Alt 2. Jun 2006, 13:50
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;
Sascha
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#3

Re: Viele Threads mit VCL - aber wie?

  Alt 2. Jun 2006, 13:52
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.

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.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#4

Re: Viele Threads mit VCL - aber wie?

  Alt 2. Jun 2006, 13:54
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;
{...}
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von mr47
mr47

Registriert seit: 6. Dez 2004
Ort: Stuttgart
644 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Viele Threads mit VCL - aber wie?

  Alt 2. Jun 2006, 14:04
Zitat von Sascha L:
Du sprichst es doch schon an: Arrays.

Wieso machst du es dann nicht auch einfach?
Ja frag ich mich auch
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
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Viele Threads mit VCL - aber wie?

  Alt 2. Jun 2006, 14:10
Hallo,

entweder Du erweiterst Dein Create oder Du bildest Felder die Du zwischen den Aufrufen von CreateSuspended und Resume füllst.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Sascha L

Registriert seit: 4. Jun 2004
Ort: Hamm
390 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Viele Threads mit VCL - aber wie?

  Alt 2. Jun 2006, 14:11
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;
Sascha
  Mit Zitat antworten Zitat
Benutzerbild von mr47
mr47

Registriert seit: 6. Dez 2004
Ort: Stuttgart
644 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Viele Threads mit VCL - aber wie?

  Alt 2. Jun 2006, 14:24
Okay ich glaub ich hab's verstanden! Ich danke euch allen herzlich! Bei Unklarheiten meld ich mich nochmal





mr47
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz