AGB  ·  Datenschutz  ·  Impressum  







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

TCollection & TCollectionitem Tutorial

Ein Thema von MrBrown90 · begonnen am 7. Nov 2017 · letzter Beitrag vom 16. Nov 2017
Antwort Antwort
Seite 1 von 2  1 2      
MrBrown90

Registriert seit: 7. Nov 2017
39 Beiträge
 
#1

AW: TCollection & TCollectionitem Tutorial

  Alt 13. Nov 2017, 10:29
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 ?
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TCollection & TCollectionitem Tutorial

  Alt 13. Nov 2017, 10:39
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 ?
Das kommt jetzt darauf an, was genau "// Macht was" machen soll.
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?

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?
https://downloads.delphi-treff.de/DelphiStarter.pdf
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.905 Beiträge
 
Delphi 12 Athens
 
#3

AW: TCollection & TCollectionitem Tutorial

  Alt 13. Nov 2017, 10:45
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:
  
Procedure TMyThread.Execute;
Begin
  While Not Terminated do
    If ID=1 Then
    Begin
      //Macht was
    If ID=2 // ....usw
Prinzipiell ist ein While not Terminated 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.

Und den von TiGü geposteten Link kann ich natürlich voll umfänglich empfehlen
Thomas Breitkreuz
Gruß Thomas
- Admin DelphiPRAXIS
- Admin Delphi-Treff
- Embarcadero MVP

Geändert von TBx (13. Nov 2017 um 10:47 Uhr)
  Mit Zitat antworten Zitat
MrBrown90

Registriert seit: 7. Nov 2017
39 Beiträge
 
#4

AW: TCollection & TCollectionitem Tutorial

  Alt 13. Nov 2017, 10:53
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
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: TCollection & TCollectionitem Tutorial

  Alt 13. Nov 2017, 11:02
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!"
  Mit Zitat antworten Zitat
MrBrown90

Registriert seit: 7. Nov 2017
39 Beiträge
 
#6

AW: TCollection & TCollectionitem Tutorial

  Alt 13. Nov 2017, 11:36
Okay Id wird folgendermaßen bestimmt

Delphi-Quellcode:
Procedure TForm7.Listbox1Click(Sender:TObject)
Begin
ID=integer(ListBox1.Items.Objects[Listbox1.Itemindex]);
End;
Ps: bin allein im Büro, deswegen kann ich ja auch keine Kollegen um Hilfe Fragen
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: TCollection & TCollectionitem Tutorial

  Alt 13. Nov 2017, 12:12
Okay Id wird folgendermaßen bestimmt

Delphi-Quellcode:
Procedure TForm7.Listbox1Click(Sender:TObject)
Begin
ID=integer(ListBox1.Items.Objects[Listbox1.Itemindex]);
End;
Ps: bin allein im Büro, deswegen kann ich ja auch keine Kollegen um Hilfe Fragen
Delphi-Quellcode:
Procedure TForm7.Listbox1Click(Sender:TObject)
Begin
ID=integer(ListBox1.Items.Objects[Listbox1.Itemindex]);
ShowMessage('ID: ' + IntToStr(ID));
End;
Bitte einfach mal damit prüfen, ob ID wirklich geändert wird.

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.

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.
  Mit Zitat antworten Zitat
MrBrown90

Registriert seit: 7. Nov 2017
39 Beiträge
 
#8

AW: TCollection & TCollectionitem Tutorial

  Alt 13. Nov 2017, 18:26
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.813 Beiträge
 
Delphi 12 Athens
 
#9

AW: TCollection & TCollectionitem Tutorial

  Alt 14. Nov 2017, 07:13
Ich steh grad aufm Schlauch, wo wird denn b gesetzt?

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.437 Beiträge
 
Delphi 12 Athens
 
#10

AW: TCollection & TCollectionitem Tutorial

  Alt 14. Nov 2017, 07:47
Moin...
Komisch das sich noch niemand beschwert hat...
Delphi-Quellcode:
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;
Der Zugriff auf GUI Elemente aus dem Thread heraus, ist keine gute Idee!
Besser:
Ein Event aus dem Thread mit Synchronize.
http://docwiki.embarcadero.com/Libra...ad.Synchronize
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:07 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