AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Verwaltung von unbestimmter Anzahl Threads
Thema durchsuchen
Ansicht
Themen-Optionen

Verwaltung von unbestimmter Anzahl Threads

Ein Thema von MiKaEr · begonnen am 2. Feb 2012 · letzter Beitrag vom 2. Feb 2012
Antwort Antwort
MiKaEr
(Gast)

n/a Beiträge
 
#1

Verwaltung von unbestimmter Anzahl Threads

  Alt 2. Feb 2012, 14:07
hallo,

welches ist eine optimale methode, um eine unbestimmte anzahl an threads zu verwalten?

es kann ein thread sein, es könnern aber auch zehn sein.

ich hatte ein eine ObejctList gedacht. im Create der liste erzeuge ich den thread und speichere ihn mit einer fortlaufenden ID ab. so kann ich auch später bequem drauf zugreifen und ihn beenden.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Verwaltung von unbestimmter Anzahl Threads

  Alt 2. Feb 2012, 14:15
.. im create erzeugst Du eine Instanz von TObjectList.
Wenn Du im create einen Thread erzeugst, hast Du keine unbestimmte anzahl.

Ich würde den Thread (separat) erzeugen und mit add an die Liste anhängen.

Delphi-Quellcode:
objectList := TObjectList.create(true);
objectList.add(TDeinThreadType.create(false));
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Verwaltung von unbestimmter Anzahl Threads

  Alt 2. Feb 2012, 14:25
Werden die Threads immer nur in einem Thred erstellt und freigegeben?


Wenn nicht:
Es gibt leider keine threadsicher TObjektList, aber wenigstens eine Delphi-Referenz durchsuchenTThreadList.
Das ist eine Liste, auf welche man threadsicher, von unterschiedlichen Threads, zugreifen kann.

Oder man nimmt eine TObjektList (mit Generics eine TObjektList<TThread> ) und z.B. eine CriticalSection zum Schutz der Liste.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
MiKaEr
(Gast)

n/a Beiträge
 
#4

AW: Verwaltung von unbestimmter Anzahl Threads

  Alt 2. Feb 2012, 14:46
mh also ich habe nun folgendes. das ist nicht perfekt, aber besser kann ich es nicht:

Delphi-Quellcode:
// ...
uses Unit4;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject); // thread starten und in liste einfügen
begin
 ThreadList.Add(TTestThread.Create(Label1));
end;

procedure TForm1.Button3Click(Sender: TObject); // thread beenden (?!) und aus liste nehmen
begin
 ThreadList.Delete(0);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 ThreadList := TObjectList.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 ThreadList.Free;
end;
meine thread-klasse:
Delphi-Quellcode:
unit Unit4;

interface

uses
 System.Classes, StdCtrls, SysUtils;

type
 TTestThread = class(TThread)
 private
 FMeinString: String;
  Flbl: TLabel;
  { Private-Deklarationen }
 protected
  procedure Execute; override;
 public
  constructor Create(lb: TLabel); virtual;
 end;

implementation

uses Unit1;
{ TTestThread }

constructor TTestThread.Create(lb: TLabel);
begin
 inherited Create(False);

 FMeinString := 'X';
 Flbl := lb;
end;

procedure TTestThread.Execute;
var
 i: Integer;
begin
 Randomize;

 while not Terminated do
  begin
   for i := 0 to 9 do
    if Terminated then
     break
    else
     sleep(1000);

   Flbl.Caption := IntToStr(Random(1000));
   Synchronize(Form1.Update);
  end;
end;

end.
erklärung zum sleep:
ich lasse meinen thread pro schleifendurchlauf (while) eine bestimmte zeit schlafen. damit ich ihn aber nicht "einfriere" und auf einen klick auf einen button, welcher den thread beenden soll, reagieren kann, warte ich
10 mal 1 Sekunde statt 1 mal 10 Sekunden

Geändert von MiKaEr ( 2. Feb 2012 um 16:46 Uhr)
  Mit Zitat antworten Zitat
MiKaEr
(Gast)

n/a Beiträge
 
#5

AW: Verwaltung von unbestimmter Anzahl Threads

  Alt 2. Feb 2012, 16:42
leider habe ich ein kleines problem die threads zu beenden. ich muss während der laufzeit an eine string-variable, welche ich beim anlegen des threads befülle, herankommen.

wie genau mache ich das?

die threadklasse sieh so aus wie im post zuvor.

Geändert von MiKaEr ( 2. Feb 2012 um 16:45 Uhr)
  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 01:37 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