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
MrBrown90

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

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.081 Beiträge
 
Delphi 10.4 Sydney
 
#2

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
 
#3

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.081 Beiträge
 
Delphi 10.4 Sydney
 
#4

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
 
#5

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.826 Beiträge
 
Delphi 12 Athens
 
#6

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.480 Beiträge
 
Delphi 12 Athens
 
#7

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
TiGü

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

AW: TCollection & TCollectionitem Tutorial

  Alt 14. Nov 2017, 07:58
Du hast jetzt nicht ernsthaft alles händisch mit dem Smartphone abgetippt, oder etwas doch?
So kann das nämlich nicht kompilieren.
  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 11:44 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