![]() |
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:27 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