AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Array of Threads ???

Ein Thema von lume96 · begonnen am 20. Jan 2005 · letzter Beitrag vom 21. Jan 2005
Antwort Antwort
Benutzerbild von lume96
lume96

Registriert seit: 14. Sep 2003
Ort: Rognac/Marseille - Frankreich
128 Beiträge
 
Delphi 7 Professional
 
#1

Array of Threads ???

  Alt 20. Jan 2005, 16:57
Hallo,


Ich bin bei meinem ersten Prog mit Threads angelangt und stoße auf ein paar Probleme.

Mein Programm soll sich in bestimmten Zeitabständen in ein POP3-Postfach einloggen und die Mails runterladen. Das Ganze passiert in einem Thread, denn ich habe vor, mehrere Postfächer zeitgleich bearbeiten zu können.

Mein erstes Problem liegt darin, dass ich vorab nicht weiß, wie viele Threads im Programm laufen werden (der User soll neue POP3-Postfach-Profile erstellen können). Ich weiß daher nicht, wie ich mein(e) Thread(s) deklarieren soll?

Als Beispiel: wenn’s immer 4 wären, würde ich

  MyThread : array[1..4] of TMyThread; deklarieren.

Soll ich einfach eine maximale mögliche Anzahl festlegen (hatte ich sowieso vor) und mein Array dementsprechend auslegen?

Was kostet es mich (welche Nachteile hat es), wenn ich z.B. sage :
     MyThread : array[1..50] of TMyThread; Im Endeffekt aber nur, z.B. zwei Instanzen wirklich benutze :
Delphi-Quellcode:
  
MyThread[1] := TMyThread.Create(true);
MyThread[2] := TMyThread.Create(true);
Da jeder Thread seine eigene ProgressBar und eigenen Label haben soll, bezieht sich die gleiche Frage ebenfalls auf’n array of TLabel und array of TProgressbar.

Wäre für Eure Ratschläge echt dankbar.

Tschüss,
Lutz
Lutz Meyer
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.536 Beiträge
 
#2

Re: Array of Threads ???

  Alt 20. Jan 2005, 16:59
Hallo Lutz,

du könntest mit einem dynamischen Array arbeiten:
var MyThreads = array of TMyThread Bevor du einen Thread hinzufügst: SetLength(MyThreads, Length(MyThreads)+1); Beim Löschen musst du dann den richtigen Platz wieder leermachen.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von lume96
lume96

Registriert seit: 14. Sep 2003
Ort: Rognac/Marseille - Frankreich
128 Beiträge
 
Delphi 7 Professional
 
#3

Re: Array of Threads ???

  Alt 20. Jan 2005, 17:36
Hi,

erst mal vielen Dank für die schnelle Antwort.

Hab's kurz probiert und neue Threads hinzufügen klappt schon ganz gut.

Zitat von alcaeus:
Beim Löschen musst du dann den richtigen Platz wieder leermachen.
Könntest Du mir das kurz erklären, bitte ?

Ich habe vor, in meiner Threadklasse ein Event zu implantieren der das Hauptprogramm informiert, dass der Thread fertig ist. In den Eventhandler des Hauptprogramms soll dann ein MyThread[x].free; rein.
Weiss nocht nicht, ob das so geht und wenn, wie, aber das finde ich bestimmt noch raus.
Wie auch immer, gegeben ich hab anfangs 2 Threads und der Erste ist fertig; führe also ein MyThread[1].Free; aus. Wie lösche ich dann den 'richtigen' Platz und was passiert wenn ich dann 'nen neuen Thread hinzufüge ? Wird der dann MyThread[3], auch wenn es den MyThread[1] nicht mehr gibt. Ich blick da nicht so ganz durch

Wäre super, wenn mir da jemand auf die Sprünge helfen könnte.
Tschüss,
Lutz
Lutz Meyer
  Mit Zitat antworten Zitat
Benutzerbild von Jan
Jan

Registriert seit: 24. Sep 2002
Ort: Magdeburg
491 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Array of Threads ???

  Alt 20. Jan 2005, 17:42
Was er damit meint ist, dass du wissen muss an welcher Stelle in dem array du welchen thread abgelegt hast.
Wenn dein array also 4 Elemente hat, und du verlängerst deinen array mit setlength um eine Stelle und fügst einen neuen thread hinzu, dann befindet sich der neue thread in deinem array an der Stelle 4 also threadarray[4]. Wenn du den thread dann nachher wieder löschen willst, dann musst du natürlich wissen wo Du den abgelegt hast. Also musst Du Dir zu dem thread irgendwo die '4' ablegen.
Wenn du den array an der stelle x freigibst, und dann einen neuen thread hinzufügst, dann musst du trotzdem den array erstmal verlängern um einen weiteren thread hinzufügen zu können. Der neue thread wäre dann aber nicht an der stelle wo der alte gelöscht wurde, sondern jetzt an letzter stelle des arrays.
Du kannst allerdings nach dem Löschen eines threads in einer Schleife alle weiteren threads eins nach unten rücken, so dass der letzte Platz im array wieder frei wird.
Gruß
Jan
Jan
Wenn die Sonne der Kultur tief steht, werfen auch kleine Gestalten lange Schatten.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Array of Threads ???

  Alt 20. Jan 2005, 17:45
ich würde anstelle des Arrays da "TList" verwenden. Da gibts die Methoden "Add" und "Delete" die das anlegen und löschen übernehmen. mit "IndexOf" kann man dann auch feststellen an welcher Stelle der Thread in der Liste ist um diesen zu löschen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von lume96
lume96

Registriert seit: 14. Sep 2003
Ort: Rognac/Marseille - Frankreich
128 Beiträge
 
Delphi 7 Professional
 
#6

Re: Array of Threads ???

  Alt 20. Jan 2005, 17:55
Ok,

Erst mal Danke für die Antworten/Vorschläge.

Ich werde die verschiedenen Lösungen mal durchprobieren und melde mich zurück, wenn ich Probleme habe.

Tschüss,
Lutz
Lutz Meyer
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: Array of Threads ???

  Alt 20. Jan 2005, 23:53
Moin!

Ich würde bei SirThomberry's Vorschlag noch ein wenig weiter treiben: Nutze die TObjectList aus der Unit Contnrs - diese ist nix weiter als TList, aber du kannst direkt Klassenoperatoren drauf anwenden, da er mit TObject hantiert.

MfG
Muetze1
  Mit Zitat antworten Zitat
Benutzerbild von lume96
lume96

Registriert seit: 14. Sep 2003
Ort: Rognac/Marseille - Frankreich
128 Beiträge
 
Delphi 7 Professional
 
#8

Re: Array of Threads ???

  Alt 21. Jan 2005, 14:32
Moin,

@Muetze1: Danke für die Info. Hab es auch so gelöst (war bei einer Suche nach TList in der DP auf die TObjectList gestossen) und es scheint ganz gut zu laufen.

Kann, während das Prog läuft, Threads hinzufügen und wieder löschen, jeder Thread hat seine eigene ProgressBar und seinen eigenen CancelBtn auf dem Mainform und als klappt.

Ist fast schon beängstigend. Da das mein erstes Projekt mit Threads ist, hatte ich mit ordenlich Problemen gerechnet. Na ja, die kommen vielleicht noch.


Noch mal Danke an alle.
Tschüss,
Lutz
Lutz Meyer
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf