AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Nicht gestarteter TThread wird nicht beendet - Verständnisproblem: Thread und Event
Thema durchsuchen
Ansicht
Themen-Optionen

Nicht gestarteter TThread wird nicht beendet - Verständnisproblem: Thread und Event

Ein Thema von TiGü · begonnen am 5. Mär 2015 · letzter Beitrag vom 12. Mär 2015
Antwort Antwort
Seite 2 von 2     12   
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#11

AW: Nicht gestarteter TThread wird nicht beendet - Verständnisproblem: Thread und Ev

  Alt 9. Mär 2015, 11:08
Es gibt eine zentrale Instanze "Waschsalon" die für die Anwendung "Waschmaschinen" bereitstellt.

Der "Waschsalon" bekommt seine "Waschmaschinen" von der "HardwareAnsteuerungFactory", davon kann es aber mehrere geben.
Eine für PCI, USB, WLAN oer was uns die Zukunft noch so alles bringt.
Eventuell werden diese auch erst zur Laufzeit der Anwendung per DLL eingebunden(z.B. eine DLL je Hardwaretyp).

Der "Waschsalon" braucht nicht zu wissen, woher die "Waschmaschinen" kommen.
Deshalb ist es sinnvoll, das jede "HardwareAnsteuerungFactory" ihre "Waschmaschinen" erzeugt und beim "Waschsalon" registriert.
Delphi-Quellcode:
IWaschsalon = interface
  ['{240F248A-E379-44B3-ADBA-B08B3DE26567}']
  function GibtWaschmaschineMitDerNummer(WaschmaschinenNummer : Integer) : IWaschmaschine;
  
  function Count: Integer; // Anzahl der registrierten Maschinen
  function GetItem(AIndex: Integer): IWaschmaschine;
  procedure Register(AWaschmaschine: IWaschmaschine); // Maschine hinzufügen
end;


THardwareAnsteuerungFactory.RegisterWaschmaschinen(AWaschsalon: IWaschsalon);
var
  Waschmaschine: TWaschmaschine;
begin
  for i := 0 to FItems.Count - 1 do
  begin
    Waschmaschine := TWaschmaschine.Create(FItems[i]);
    AWaschsalon.Register(Waschmaschine);
  end;
end;
  Mit Zitat antworten Zitat
TiGü

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

AW: Nicht gestarteter TThread wird nicht beendet - Verständnisproblem: Thread und Ev

  Alt 12. Mär 2015, 10:34
Hallo Blup,

vielen Dank für die Anregung.
Da es sich aber irgendwie falsch anfühlt, dass die HardwareAnsteuerungsFactory sowohl darüber entscheidet, welche Art von Ansteuerung verwendet wird, als auch die Waschmaschinen kennt und erzeugt, habe ich die Register-Methode in eine eigene WaschmaschinenFactory ausgelagert.
Es erscheint mir noch flexibler zu sein.

Noch ein bisschen unzufrieden bin ich mit dem Punkt, den der Günther erwähnt hat.
Ich veranlasse das Erzeugen im AfterConstruction des Waschsalons und bin damit jeder Exception schutzlos ausgeliefert.
Es wäre wohl besser dem Befehl des Erzeugens eine Ebene höher explizit auszuführen.
Hier im Beispiel also in der procedure Main nach dem Erzeugen des Waschsalons.

Was denkt ihr?
Im Anhang der aktuelle Stand.

Delphi-Quellcode:
  IWaschsalon = interface
    ['{240F248A-E379-44B3-ADBA-B08B3DE26567}']
    function GibtWaschmaschineMitDerNummer(WaschmaschinenNummer : Integer) : IWaschmaschine;
    function GetCount: Integer;
    function GetMaxWaschmaschinen : Integer;
    procedure RegisterWaschmaschine(const AWaschmaschine: IWaschmaschine);

    property MaxWaschmaschinen : Integer read GetMaxWaschmaschinen;
    property Count : Integer read GetCount;
  end;

...

  TWaschmaschinenFactory = class abstract
    class procedure RegisterWaschmaschinen(const AWaschsalon: IWaschsalon);
  end;

...

class procedure TWaschmaschinenFactory.RegisterWaschmaschinen(const AWaschsalon: IWaschsalon);
var
  Waschmaschine: IWaschmaschine;
  HardwareAnsteuerung : IHardwareAnsteuerung;
  I : Integer;
begin
  THardwareAnsteuerungFactory.GetHardwareAnsteuerung(HardwareAnsteuerung);

  for I := 0 to AWaschsalon.MaxWaschmaschinen - 1 do
  begin
    Waschmaschine := TWaschmaschine.Create(HardwareAnsteuerung);
    AWaschsalon.RegisterWaschmaschine(Waschmaschine);
  end;
end;

...

procedure TWaschsalon.AfterConstruction;
begin
  inherited;
  FWaschmaschinenListe := TList<IWaschmaschine>.Create;

  FülleWaschmaschinenListe;
end;

...

procedure TWaschsalon.FülleWaschmaschinenListe;
begin
  TWaschmaschinenFactory.RegisterWaschmaschinen(Self);
end;
Angehängte Dateien
Dateityp: zip Waschsalon.zip (1,7 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 14:50 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