AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TCollection & TCollectionitem Tutorial

Ein Thema von MrBrown90 · begonnen am 7. Nov 2017 · letzter Beitrag vom 16. Nov 2017
Antwort Antwort
Seite 8 von 9   « Erste     678 9   
MrBrown90

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

AW: TCollection & TCollectionitem Tutorial

  Alt 15. Nov 2017, 09:23
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
  Mit Zitat antworten Zitat
4dk2

Registriert seit: 4. Sep 2007
176 Beiträge
 
#72

AW: TCollection & TCollectionitem Tutorial

  Alt 15. Nov 2017, 10:20
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
DAS GANZE GEHÖRT hier aber nicht hin.
Mach bitte einen eigenen Thread dazu auf.
  Mit Zitat antworten Zitat
MrBrown90

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

AW: TCollection & TCollectionitem Tutorial

  Alt 15. Nov 2017, 18:11
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:

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;
Ist das soweit richtig?
  Mit Zitat antworten Zitat
TiGü

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

AW: TCollection & TCollectionitem Tutorial

  Alt 16. Nov 2017, 08:57
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 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.
  Mit Zitat antworten Zitat
MrBrown90

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

AW: TCollection & TCollectionitem Tutorial

  Alt 16. Nov 2017, 09:33
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:
for i := 0 to 5 do

  begin

    ThreadL.AddEx(Thread.Create);

  end;
Dann soll es so funktionieren
Start-Button drücken
THREAD mit bestimmter ID startet sie
Und dieses Threads will ich mir aus meiner TCollection holen
  Mit Zitat antworten Zitat
TiGü

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

AW: TCollection & TCollectionitem Tutorial

  Alt 16. Nov 2017, 09:50
Ja, es findet wohl gar keine Zuordnung statt. Die sollte dann wahrscheinlich im Instructor von TThreaditem stattfinden oder.
Constructor, das Wort heißt Constructor.
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.
  Mit Zitat antworten Zitat
MrBrown90

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

AW: TCollection & TCollectionitem Tutorial

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

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

AW: TCollection & TCollectionitem Tutorial

  Alt 16. Nov 2017, 10:56
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.
  Mit Zitat antworten Zitat
MrBrown90

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

AW: TCollection & TCollectionitem Tutorial

  Alt 16. Nov 2017, 13:00
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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#80

AW: TCollection & TCollectionitem Tutorial

  Alt 16. Nov 2017, 13:41
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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 22:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz