Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Nicht gestarteter TThread wird nicht beendet - Verständnisproblem: Thread und Event (https://www.delphipraxis.net/184177-nicht-gestarteter-tthread-wird-nicht-beendet-verstaendnisproblem-thread-und-event.html)

Blup 9. Mär 2015 11:08

AW: Nicht gestarteter TThread wird nicht beendet - Verständnisproblem: Thread und Ev
 
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;

TiGü 12. Mär 2015 10:34

AW: Nicht gestarteter TThread wird nicht beendet - Verständnisproblem: Thread und Ev
 
Liste der Anhänge anzeigen (Anzahl: 1)
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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:18 Uhr.
Seite 2 von 2     12   

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 by Thomas Breitkreuz