Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Multicast Events: Var Parameter (https://www.delphipraxis.net/191090-multicast-events-var-parameter.html)

Ghostwalker 7. Dez 2016 09:13

Multicast Events: Var Parameter
 
Hintergrund:

Ich bastel an einer Liste für Multicast-Events in älteren Delphiversionen. Dabei gibt es ein Object, das die Liste hat (Master) und mehrere andere Objekte (Handler) die entsprechende Event-Handler implementieren.

Die Frage:

Tja..die Frage ist nun, ob es überhaupt Sinn macht, Var-Parameter in diesen Events zu unterstützen.

Technisch ist das machbar (wenn auch nicht unbedingt einfach), aber ich kann mir grad kein Szenario
vorstellen, wo das wirklich sinnig wär.

Was meint Ihr dazu ?

Neutral General 7. Dez 2016 09:18

AW: Multicast Events: Var Parameter
 
Wenn du Prioritäten einbaust ist es zumindest nutzbar.
Der wichtigste gewinnt.

In der API für Minecraft Server Plugins gibt es z.B. oft Events die von mehreren Plugins verarbeitet werden und bei denen das Plugin auch Daten im Event zurückgeben kann.
Das funktioniert dann wie oben beschrieben. Ob du das willst/brauchst musst du dann selbst überlegen.

Ghostwalker 7. Dez 2016 09:49

AW: Multicast Events: Var Parameter
 
Prioritäten ?

Wenn dann sollte der Master schon alle Var-Parameter aller Handler bekommen (also im Endeffekt ein Array bzw. eine Liste).

Zum besseren Verständnis ein Beispiel:

Delphi-Quellcode:
Type
  TMyEvent = Procedure (var aInt:Integer) of object;

  TMaster = Class(TObject)
    :
    Procedure ExecuteEvent;
  end;

  THandlerPlus = Class(TObject)
    :
    Procedure HandleMyEvent(var aInt:integer);
    :

  THandlerMinus = class(TObject)
    :
    Procedure HandleMyEvent(var aInt:integer);

  THandlerMal = Class(TObject)
    :
    Procedure HandleMyEvent(var aInt:integer);

var
  master : TMaster;
  h1 : TPlusHandler;
  h2 : TMinusHandler;
  h3 : TMalHandler;
h1..h3 hängen sich nun an das Event von Master. Master löst das Event aus (ExecuteEvent) und
übergibt 42. Rückgabe wäre dann (45,39,126).

EWeiss 7. Dez 2016 09:52

AW: Multicast Events: Var Parameter
 
wäre das nicht gleich Callback ?

gruss

Neutral General 7. Dez 2016 10:00

AW: Multicast Events: Var Parameter
 
Zitat:

Zitat von Ghostwalker (Beitrag 1355571)
Prioritäten ?
Wenn dann sollte der Master schon alle Var-Parameter aller Handler bekommen (also im Endeffekt ein Array bzw. eine Liste).

Naja gut, Kommt halt immer drauf an was du brauchst bzw. machen willst.
Du kannst halt die Eventhandler nacheinander aufrufen und nach jedem Aufruf den Var-Parameter in eine Liste schreiben.
Oder zu rufst die Eventhandler nacheinander auf und reichst den var-Parameter immer weiter durch (im Idealfall wie gesagt mit Prioritäten).

Das sind beide Möglichkeiten und wie du es bei einem speziellen Event implementierst hängt von dem Event ab und was das Event am Ende haben will.
Ein var-Parameter wie "CanClose" macht halt als Array z.B. keinen Sinn. Es sei denn Mehrheit entscheidet am Ende :mrgreen:

Ghostwalker 7. Dez 2016 10:07

AW: Multicast Events: Var Parameter
 
@EWeiss
Ein Callback oder Event seitens der Eventliste wäre eine Möglichkeit, das zu handeln. Eine andere ein Array of const als Rückgabewert.

Hat beides seine Vor- und Nachteile.

Die Frage ist aber eher, ob es Sinn macht so einen Mechanismus überhaupt zu implementieren.

@Neutral General

Ziel diese "kleinen" (hust....) Projektes ist eine Art EventManager, der verschiedene Events und
ihre Handler managed (und natürlich ggf auch aufrufen) kann.

EWeiss 7. Dez 2016 10:11

AW: Multicast Events: Var Parameter
 
Zitat:

Die Frage ist aber eher, ob es Sinn macht so einen Mechanismus überhaupt zu implementieren.
Deshalb ja meine Frage ;)

Denn für mich ist eine Callback letztendlich nichts anderes als eine Liste von Events welche mir definierte Zustände schaltet bzw. diese auch zurückgeben kann.
Daher würde ich auf diesen Mechanismus verzichten.
Aber es ist letztendlich deine Entscheidung ob du das für besser oder sinnvoll empfindest.


gruss

Ghostwalker 7. Dez 2016 10:41

AW: Multicast Events: Var Parameter
 
Ob nun Event basiert, Callback oder Array ist eine Frage der Implementierung.

Mir gehts eher darum ob eine Implementierung (egal welche) überhaupt im Rahmen von Multicast-Events sinn macht.

EWeiss 7. Dez 2016 10:47

AW: Multicast Events: Var Parameter
 
Zitat:

überhaupt im Rahmen von Multicast-Events sinn macht.
Ok :)

Dann kann ich nicht weiter mit reden da ich noch keine "Multicast Events" bisher benötigt habe.

gruss

Stevie 7. Dez 2016 10:54

AW: Multicast Events: Var Parameter
 
Kleines Beispiel:

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  Spring;

type
  {$M+}
  TCallback = reference to procedure(var x: Integer);

procedure Add(var x: Integer);
begin
  x := x + x;
end;

procedure Mul(var x: Integer);
begin
  x := x * x;
end;

procedure Main;
var
  e: Event<TCallback>;
  i: Integer;
begin
  e.Add(Add);
  e.Add(Mul);

  i := 3;
  e.Invoke(i);
  Writeln(i); // 36

  e.Clear;
  e.Add(Mul);
  e.Add(Add);

  i := 3;
  e.Invoke(i);
  Writeln(i); // 18
end;

begin
  Main;
end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:37 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