![]() |
AW: TCollection & TCollectionitem Tutorial
Ich soll mich in der Arbeit nirgends einloggen.
Ich denke, ich hab es geschafft..ich probiere noch weiter rum ..und schicke den ganzen Code dann von Zuhause. Danke |
AW: TCollection & TCollectionitem Tutorial
Zitat:
Es kann ja keiner was dagegen haben, wenn du dich für deine Arbeit hier Rat holst. |
AW: TCollection & TCollectionitem Tutorial
Ne, hab natürlich nachgefragt..ist nicht erwünscht
|
AW: TCollection & TCollectionitem Tutorial
Moin...:P
[OT] Zitat:
Ohne Worte...:roll: PS: Mich würde mal interessieren, wieviele LKW auf dem Hof stehen müßten...:zwinker: [/OT] |
AW: TCollection & TCollectionitem Tutorial
Hi,
Für die Aufgabe die ich gepostet habe bezüglich Threads hab ich folgende Execute Methode geschrieben Procedure TMyThread.Execute; Begin While Not Terminated so If ID=1 Then Begin //Macht was If ID=2 ....usw Die Ids vergebe ich über eine listbox. Aber ganz klappt das nicht, ist der Ansatz in Ordnung ? |
AW: TCollection & TCollectionitem Tutorial
Zitat:
Und was genau "ganz klappt das nicht" heißen soll. Klappt es nur zu 74,3 % oder wie sollen wir das deuten? Das alte Glaskugel-Problem, du verstehst? :glaskugel: Es gibt in Delphi auch sowas wie ein switch-case-Statement. Nennt sich hier Case-Of. Kann ich dir folgende Lektüre ans Herz legen? ![]() |
AW: TCollection & TCollectionitem Tutorial
Es wäre schön, wenn Du dir angewöhnen würde, die Delphi-Tags zu verwenden.
Dann sähe das Ganze so aus:
Delphi-Quellcode:
Prinzipiell ist ein Procedure TMyThread.Execute; Begin While Not Terminated do If ID=1 Then Begin //Macht was If ID=2 // ....usw
Delphi-Quellcode:
im Execute eines TThread-Nachfahren richtig. Leider ist aus dem von Dir geposteten Bruchstücks nicht ersichtlich, ob die vollständige IF-Orgie (die man durch ein Case ersetzen könnte) im Deiner While-Schleife abgearbeitet wird. Auf den ersten Blick würde ich vermuten, das da nur das erste IF dranhängt, da auf das While-Statement kein begin folgt.
While not Terminated
Und den von TiGü geposteten Link kann ich natürlich voll umfänglich empfehlen ;-) |
AW: TCollection & TCollectionitem Tutorial
Okay
MACHT was = Form1.Memmo1.Lines.Add('Thread Nr 0' + DateTimetostr(Now) +'uhr') Und das halt dann für jedem Thread, es ändert sich praktisch nur die Nummer des Threads Meine einzelnen Threads starte ich über einen Button und davor wähle ich den Thread über die Listbox aus. Procedure TForm1.StartClick(Sender: TObject) Begin If id =1 then Begin Thread1 := TMyThread.Create End; Usw... Stoppen würde ich auch mit einem Button If id =1 then Begin Thread1.free End Usw.. Es klappt nicht, das mehrer Threads gestartet werden ...es klappt nur bei Thread Nr 0 Und danke für die Lektüre, hab if nur zum testen benutzt, wollte mich noch mit Switch Case beschäftigen |
AW: TCollection & TCollectionitem Tutorial
Ok...da haben wir jetzt mehrere Baustellen, aber arbeiten wir das erstmal Schritt für Schritt ab.
Was ist ID? Wo kommt die Variable her, wie wird sie befüllt? Ändert sich der Wert von ID überhaupt, wenn du das dazu passende Oberflächenelement änderst? Bitte höre auf am Handy zu schreiben und logge dich mit deinen PC ein. Das macht ja erstmal einen komischen Eindruck, wenn der Student in seinen Praktikum ständig am Smartphone hängt. "Hey Chef, der neue Praktikant surft den ganzen Tag mitt'n Smartphone rum!" - "Waaaas??? Der soll doch seine einfache Lernaufgabe lösen!" |
AW: TCollection & TCollectionitem Tutorial
Okay Id wird folgendermaßen bestimmt
Delphi-Quellcode:
Ps: bin allein im Büro, deswegen kann ich ja auch keine Kollegen um Hilfe Fragen
Procedure TForm7.Listbox1Click(Sender:TObject)
Begin ID=integer(ListBox1.Items.Objects[Listbox1.Itemindex]); End; |
AW: TCollection & TCollectionitem Tutorial
Zitat:
Delphi-Quellcode:
Bitte einfach mal damit prüfen, ob ID wirklich geändert wird.
Procedure TForm7.Listbox1Click(Sender:TObject)
Begin ID=integer(ListBox1.Items.Objects[Listbox1.Itemindex]); ShowMessage('ID: ' + IntToStr(ID)); End; Wenn du eh alleine im Büro bist, dann nutze doch den Browser, guckt ja eh keiner. Kannst ja auch ein Inkognito-Fenster/Private-Browsing-Tab nutzen. :roll: Dann könntest du auch ganz einfach deinen bisherigen Quelltext posten und wir müssen nicht immer Glaskugel polieren und du wärst auch schneller am Ziel. |
AW: TCollection & TCollectionitem Tutorial
So jetzt mal der Code wie ich ihn bisher habe
Delphi-Quellcode:
type
TForm1=class(TForm) Start:TButton; Button3:TButton; ListBox1:TListBox; Label1:TLabel1; Label2:TLabel2; ListBox3:TListBox; Edit1:TEdit; Memo1:TMemo; procedure StartCklick(Sender:TObject); procedure Button3Click(Sender:TObject); procedure FormCreate(Sender:TObject); procedure ListBox1Click(Sender:TObject); private public end; TyMyThread=Class(TThread) protected Counter:integer; procedure execute;override; public constructor create; end; var Form7:TForm7; Thread1,Thread2,Thread3,Thread4,Thread5,Thread6:TMyThread; ID,TreadID:integer; implementation procedure TMyThread.Execute; var b:integer; while not Terminated do begin sleep(100) if b=1 then begin Form7.Memo1.Lines.Add('Thread Nr.0 ' +DataTimeToStr(Now) + 'Uhr'); end; if b=2 then begin Form7.Memo1.Lines.Add('Thread Nr.1 ' +DataTimeToStr(Now) + 'Uhr'); end; end; end; procedure TForm7.StartClick(Sender :TOject); var I:integer; begin ThreadID:=ID; if ThreadID=1 then begin Thread1:=TMyThread.create; end; if ThreadID=2 then begin Thread2:=TMyThread.create; end; end; procedure TForm7.Button3Click(Sender:TObject); begin if ID=1 then begin Thread1.Terminate; Thread1.WaitFor; Thread1.Free; end; if ID=2 then begin Thread2.Terminate; Thread2.WaitFor; Thread2.Free; end; end; constructor TMyThread.create; begin inherited create(True); resume; end; procedure TForm7.FormCreate(Sender:TObject); begin Listbox1.Items.AddObject('Thread Nr. 0', TObject(1)); Listbox1.Items.AddObject('Thread Nr. 1', TObject(2)); end; procedure 7TForm7.ListBox1Click(Sender: TObject); begin ID:= integer(ListBox1.Items.Objects(ListBox1.ItemIndex)); end; end. Das wäre bis jetzt der ganze Code, muss natürlich noch ordentlich überarbeitet werden, aber ich denke soweit funktioniert es jetzt so, dass ich 2 Threads starten/stoppen kann und man dies in der Ausgabe sieht. |
AW: TCollection & TCollectionitem Tutorial
Ich steh grad aufm Schlauch, wo wird denn b gesetzt?
Sherlock |
AW: TCollection & TCollectionitem Tutorial
Moin...:P
Komisch das sich noch niemand beschwert hat... :wink:
Delphi-Quellcode:
:warn: Der Zugriff auf GUI Elemente aus dem Thread heraus, ist keine gute Idee!
procedure TMyThread.Execute;
var b:integer; while not Terminated do begin sleep(100) if b=1 then begin Form7.Memo1.Lines.Add('Thread Nr.0 ' +DataTimeToStr(Now) + 'Uhr'); ... end; Besser: Ein Event aus dem Thread mit Synchronize. ![]() |
AW: TCollection & TCollectionitem Tutorial
Oh hab ich wohl ausgelassen
In der execute, vor den if anweißungen ..b:=ID |
AW: TCollection & TCollectionitem Tutorial
Du hast jetzt nicht ernsthaft alles händisch mit dem Smartphone abgetippt, oder etwas doch? :shock:
So kann das nämlich nicht kompilieren. |
AW: TCollection & TCollectionitem Tutorial
Ne Ne, zuhause dann. Nur hab da keine Prog für Delphi, deswegen konnte ich nicht testen ...also kann sein das ich mich vll vertippt habe.
|
AW: TCollection & TCollectionitem Tutorial
E-Mail darfst du auf Arbeit auch nicht benutzen? Schick dir doch selber den Quelltext zu?!?
Eigentlich weiß ich nicht, wo man jetzt da anfangen soll. Wenn wir dir jetzt das alles vorkauen und verbessern, dann hast du keinen Lerneffekt. Versuche zuerst die Hinweise zum Case-Of und den Hinweis von haentschman bezüglich GUI-Zugriff aus einen externen Thread-Kontext heraus zu verstehen und umzusetzen. Wenn es dir Schwierigkeiten bereitet es zu verstehen: Bitte frage gezielt nach! |
AW: TCollection & TCollectionitem Tutorial
Und wegen Zuhause:
Bitte lade dir die KOSTENLOSE Delphi Starter Edition runter: ![]() Installieren nicht vergessen. |
AW: TCollection & TCollectionitem Tutorial
Vielen Dank, mache ich.
Aber eine Frage hätte ich noch. Wie sehe ich denn, das dies alles von mehreren Threads ausgeführt wird ? |
AW: TCollection & TCollectionitem Tutorial
Zitat:
Wenn du beide Threads startest, sollten beide ins Memo schreiben?! War das die Antwort auf deine Frage? |
AW: TCollection & TCollectionitem Tutorial
Ja genau das war die Frage. Aber wenn ich z.b die if b=2 weglasse, wird auch 2mal ins Memo geschrieben. Dann wird alles von einem Thread ausgeführt?
|
AW: TCollection & TCollectionitem Tutorial
Im Moment ist der Code noch nicht sinnvoll. Melde Dich sobald er compiliert. Mit dem richtigen Code!
Sherlock |
AW: TCollection & TCollectionitem Tutorial
Leider ignorierst du viele Fragen, aber vielleicht gehst du auf die folgenden Fragen ein:
Weist du was der Debugger und ein Haltepunkt/Breakpoint ist? Wenn ja, weißt du wie du ihn in Delphi benutzt? |
AW: TCollection & TCollectionitem Tutorial
Delphi-Quellcode:
Das wäre jetzt der ganze Code, dieser lässt sich auch compilieren.
interface
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Menus, Vcl.ExtCtrls; type TForm7 = class(TForm) Start: TButton; Button3: TButton; ListBox1: TListBox; Label1: TLabel; Label2: TLabel; ListBox3: TListBox; Edit1: TEdit; Memo1: TMemo; Timer1: TTimer; procedure StartClick(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure ListBox1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; TMyThread = class(TThread) protected counter: integer; procedure Execute; override; procedure prog; public constructor create; end; var Form7: TForm7; Thread1, Thread2, Thread3, Thread4, Thread5, Thread6: TMyThread; ID, ThreadID: integer; implementation {$R *.dfm} procedure TMyThread.Execute; var ProgID: integer; begin ProgID := ID; while not Terminated do begin sleep(100); case ProgID of 0: begin Form7.Memo1.Lines.Add('Thread Nr. 0 ' + DateTimeToStr(Now) + ' Uhr'); end; 1: begin Form7.Memo1.Lines.Add('Thread Nr. 1 ' + DateTimeToStr(Now) + ' Uhr'); end; 2: begin Form7.Memo1.Lines.Add('Thread Nr. 2 ' + DateTimeToStr(Now) + ' Uhr'); end; 3: begin Form7.Memo1.Lines.Add('Thread Nr. 3 ' + DateTimeToStr(Now) + ' Uhr'); end; 4: begin Form7.Memo1.Lines.Add('Thread Nr. 4 ' + DateTimeToStr(Now) + ' Uhr'); end; 5: begin Form7.Memo1.Lines.Add('Thread Nr. 5 ' + DateTimeToStr(Now) + ' Uhr'); end; end; end; end; procedure TForm7.StartClick(Sender: TObject); var i: integer; begin ThreadID := ID; case ThreadID of 0: begin Thread1 := TMyThread.create; end; 1: begin Thread2 := TMyThread.create;; end; 2: begin Thread3 := TMyThread.create; end; 3: begin Thread4 := TMyThread.create; end; 4: begin Thread5 := TMyThread.create; end; 5: begin Thread6 := TMyThread.create; end; end; end; procedure TForm7.Timer1Timer(Sender: TObject); begin Timer1.interval := 6000; end; procedure TMyThread.prog; begin end; procedure TForm7.Button3Click(Sender: TObject); begin case ID of 0: begin Thread1.Terminate; Thread1.WaitFor; Thread1.Free; end; 1: begin Thread2.Terminate; Thread2.WaitFor; Thread2.Free; end; 2: begin Thread3.Terminate; Thread3.WaitFor; Thread3.Free; end; 3: begin Thread4.Terminate; Thread4.WaitFor; Thread4.Free; end; 4: begin Thread5.Terminate; Thread5.WaitFor; Thread5.Free; end; 5: begin Thread6.Terminate; Thread6.WaitFor; Thread6.Free; end; end; end; constructor TMyThread.create; begin inherited create(True); resume; end; procedure TForm7.FormCreate(Sender: TObject); begin ListBox1.Items.AddObject('Thread Nr. 0', TObject(0)); ListBox1.Items.AddObject('Thread Nr. 1', TObject(1)); ListBox1.Items.AddObject('Thread Nr. 2', TObject(2)); ListBox1.Items.AddObject('Thread Nr. 3', TObject(3)); ListBox1.Items.AddObject('Thread Nr. 4', TObject(4)); ListBox1.Items.AddObject('Thread Nr. 5', TObject(5)); end; procedure TForm7.ListBox1Click(Sender: TObject); begin ID := integer(ListBox1.Items.Objects[ListBox1.ItemIndex]); end; end. Danke nochmal für die ganze Hilfe. Mein Chef hätte jetzt noch gerne das ich da mit Messages arbeite. ich hab mich schon kurz eingelesen, geht dann um Postmessage oder? |
AW: TCollection & TCollectionitem Tutorial
Liste der Anhänge anzeigen (Anzahl: 1)
Moin...:P
Zitat:
Zitat:
Beispiel: Was soll passiern wenn der Button3 mehrfach gedrückt wird? ...usw. Zitat:
Zitat:
Zitat:
grobe Fehler: 1: :warn:
Delphi-Quellcode:
Wie ich schon gesagt habe, ein Zugriff auf die GUI ist keine gute Idee!
Form7.Memo1.Lines.Add('Thread Nr. 0 ' + DateTimeToStr(Now) + ' Uhr');
![]() 2: :warn:
Delphi-Quellcode:
Globale Variablen in Verbindung mit Threads sind keine gute Idee!
var
Form7: TForm7; Thread1, Thread2, Thread3, Thread4, Thread5, Thread6: TMyThread; ID, ThreadID: integer; ![]() 3: :warn:
Delphi-Quellcode:
Beim Beenden des Threads über den Button wird er "abgeräumt"...nicht aber beim Beenden der Anwendung!
procedure TForm7.Button3Click(Sender: TObject);
begin case ID of 0: begin Thread1.Terminate; Thread1.WaitFor; Thread1.Free; end; Einfügen: In die DPR
Delphi-Quellcode:
und wundern. :zwinker:
ReportMemoryLeaksOnShutdown := True;
4: :warn:
Delphi-Quellcode:
Was denkst du was da passiert?
procedure TForm7.Timer1Timer(Sender: TObject);
begin Timer1.interval := 6000; end; Tipps (kein Muß): 1: Bitte Codeformatter benutzen. Wie in anderen Programmiersprachen auch...sprechende Namen verwenden. 8-) 2: Stelle dir mal vor das du 100 Threads hast? Wie sieht die USES aus? Schei...:roll: Wie sehen die Proceduren aus? Schei...:roll: Für so etwas gibt es Listen mit den Instanzen als Inhalt. Thread erstellen, ab in die Liste. Von dort holt man sich die Instanz in eine Variable. (z.B. CurrentThread) |
AW: TCollection & TCollectionitem Tutorial
was hat das ganze mit "TCollection & TCollectionitem Tutorial" zu tun ?
|
AW: TCollection & TCollectionitem Tutorial
Ich weiß das ich noch lange nicht fertig bin, aber ein "Danke" zwischendurch muss mal sein ..ist ja nicht selbstverständlich 😀
Ich werde mich dann gleich mal an deinen Punkten versuchen. Nur bei Punkt 1, irgendwie muss ich ja auf die GUI zugreifen oder ? Und als Liste wäre dann wahrscheinlich eine TCollection geeignet oder? |
AW: TCollection & TCollectionitem Tutorial
Die ganzen schwerwiegenden Threading-Probleme will ich gar erst nicht ansprechen, da musst du das schon geschriebene umsetzen.
Von den globalen Variablen ganz zu schweigen. Es ist aber für einen Informatik-Studenten in deinem Alter und nach einer handvoll Semester schon ein bisschen traurig, dass er nicht von alleine auf die Verwendung von Schleifen sowie Arrays bzw. Listen kommt. Das hat auch nichts mit Delphi an sich zu tun, das sollte eigentlich sitzen. Vom Niveau her ist die Aufgabe auch geeignet für den IT-Unterricht im Abitur. Beispiel:
Delphi-Quellcode:
Ich will dich jetzt zwar nicht entmutigen, aber bist du sicher, das Informatik und Programmieren der richtige Weg für dich ist?
procedure TForm7.FormCreate(Sender: TObject);
var I: Integer; begin for I := 0 to 5 do begin ListBox1.Items.AddObject('Thread Nr. ' + IntToStr(I), TObject(I)); end; end; |
AW: TCollection & TCollectionitem Tutorial
Zitat:
Das ist verboten! Dafür kommst du in die Programmierhölle. Das ist so, als würdest du mit Mutter und Schwester schlafen. Das geht zwar technisch, wird aber von deiner Umgebung aus guten Gründen abgelehnt! haentschman hat schon mehrfach auf die Dokumentation hingewiesen, du MUSST aber auch auf die Links draufklicken, lesen und verstehen: ![]() Da ist unten sogar ein fünfzeiliger Beispielcode. |
AW: TCollection & TCollectionitem Tutorial
Natürlich weiß ich wie Schleifen, Arrays usw funktionieren ...ich hab nur mein Augenmerk auf Threads gelegt, weil ich da absolut keine Ahnung davon hatte.
Und nein, ich bin mir nicht sicher ob es der richtige Weg ist. Aber was spielt das hier für eine Rolle? Fertig machen werde 8ch das Studium |
AW: TCollection & TCollectionitem Tutorial
Zitat:
Mach bitte einen eigenen Thread dazu auf. |
AW: TCollection & TCollectionitem Tutorial
Okay, Sorry ist wohl etwas vom ursprünglichen Thema abgewichen, dann wieder zurück zu TCollection.
Ich habe jetzt versucht, dass beim Programmstart 6 Threads erstellt werden und in einer TCollection gespeichert werden. Hier mal der Code dazu
Delphi-Quellcode:
Ist das soweit richtig?TMyThread = class(TThread) protected counter: integer; procedure Execute; override; procedure prog; public constructor Create; end; TThreadItem = class(TCollectionItem) private FLength: integer; public constructor Create(ACollection: TCollection); override; published property Length: integer read FLength write FLength; end; TThreadlist = class(TCollection) private procedure SetItems(Index: integer; AValue: TThreadItem); public constructor Create; function GetItems(Index: integer): TThreadItem; function AddEx(ite: TMyThread): TThreadItem; property Items[Index: integer]: TThreadItem read GetItems write SetItems; default; end; implementation constructor TThreadItem.Create(ACollection: TCollection); begin if Assigned(ACollection) then inherited Create(ACollection); end; constructor TThreadlist.Create; begin inherited Create(TThreadItem); end; constructor TMyThread.Create; begin inherited Create(True); end; function TThreadlist.GetItems(Index: integer): TThreadItem; begin result := TThreadItem(inherited Items[index]); end; function TThreadlist.AddEx(ite: TMyThread): TThreadItem; begin result := inherited Add as TThreadItem; end; function TThreadlist.AddEx(ite: TMyThread): TThreadItem; begin result := inherited Add as TThreadItem; end; procedure TForm7.FormCreate(Sender: TObject); var i: integer; Thread:array [0..5] of TMyThread; p: TThreadItem; begin ThreadL := TThreadlist.Create; for i := 0 to 5 do begin ListBox1.Items.AddObject('Thread Nr. ' + IntToStr(i), TObject(i)); end; for i := 0 to 5 do begin Thread[i]:=TMyThread.Create; ThreadL.AddEx(Thread[i]); end; ShowMessage(IntToStr(ThreadL.Count)); end; |
AW: TCollection & TCollectionitem Tutorial
Ich bin kurz davor, einfach den Quelltext in gut und fertig zu posten, aber ich habe die Hoffnung noch nicht aufgeben.
Bitte folgende Fragen beantworten: Wo genau findet bei dir die Zuordnung TThreadItem zu TMyThread statt? oder Woher weiß das TThreadItem, dass ihm ein TMyThread zugeordnet ist? Was macht FLength in TThreadItem, wozu dient es? Wozu dient das Array
Delphi-Quellcode:
?
Thread:array [0..5] of TMyThread;
Was soll am Ende mit deiner Collection geschehen? Was ist das Ziel? PS: TThreadlist.AddEx ist zweimal reinkopiert und TThreadlist.SetItems fehlt. |
AW: TCollection & TCollectionitem Tutorial
Danke für die Geduld.
Ja, es findet wohl gar keine Zuordnung statt. Die sollte dann wahrscheinlich im Instructor von TThreaditem stattfinden oder. Flength hab ich entfernt, war Quatsch. Und das Array ergibt eigentlich aauch kein Sinn. Ich möchte das beim Programmstart 6 Instanzen von TMyThread erstellt werden und in meiner TCollection eingefügt werden Wahrscheinlich so der richtige Ansatz ?
Delphi-Quellcode:
Dann soll es so funktionieren
for i := 0 to 5 do
begin ThreadL.AddEx(Thread.Create); end; Start-Button drücken THREAD mit bestimmter ID startet sie Und dieses Threads will ich mir aus meiner TCollection holen |
AW: TCollection & TCollectionitem Tutorial
Zitat:
Aber wahrscheinlich schreibst du immer noch am Handy und das war die Autokorrektur. Wenn es sich richtig anfühlt, dann wird es richtig sein! Mach es so! Jetzt musst du noch einen erweiterten TMyThread-Constructor bauen, mit dessen Hilfe du die ID (0 bis 5) übergibst und diese ID innerhalb der TMyThread-Instanz speicherst. |
AW: TCollection & TCollectionitem Tutorial
Ja ich meinte Constructor. Aber ich verstehe leider überhaubt nicht, wie ich das umsetzten soll.
So ist Quatsch oder ?
Delphi-Quellcode:
TThreadItem = class(TCollectionItem)
private public FThreadItem:TMyThread; constructor Create(ACollection: TCollection); override; published end; constructor TThreadItem.Create(ACollection: TCollection); begin inherited Create(ACollection); FThreadItem:=TMyThread.Create; end; |
AW: TCollection & TCollectionitem Tutorial
Wäre eine Möglichkeit.
Ich würde prinzipiell die Instanz von TMyThread von außen erzeugen und über eine Property eingeben, aber das ist jetzt Geschmackssache und erstmal irrelevant. Das TThreadItem ist dann in deiner Lösung verantwortlich für die Erzeugung der TMyThread-Instanzen und auch für deren Anhalten/Freigabe/Zerstörung. Mache dir nun Gedanken, wie die jeweilige TMyThread-Instanz ihre ID erhält. Vergleiche meinen Vorschlag mit dem erweiterten Constructor. |
AW: TCollection & TCollectionitem Tutorial
Okay, also wenn ich das richtig verstehe, muss ich dann auch im deconstructor meine Threads terminieren und freigeben?
Mit den Ids hätte ich jetzt über die Listbox gelöst...oder ist das wieder schlecht, weil ich wieder direkt auf die GUI zugreife?
Delphi-Quellcode:
for i := 0 to 5 do
begin ListBox1.Items.AddObject('Thread Nr. ' + IntToStr(i), TObject(ThreadL.AddEx)); end; |
AW: TCollection & TCollectionitem Tutorial
Wenn der Hauptthread auf die GUI zugreift, ist das unproblematisch. Nur wenn Deine TThread-Instanzen das tun sollen, muss das (wie auch immer) synchronisiert geschehen, sei es per Messages, TThread.Synchronize oder TThread.Queue.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:47 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-2025 by Thomas Breitkreuz