AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Multicast Events: Var Parameter

Ein Thema von Ghostwalker · begonnen am 7. Dez 2016 · letzter Beitrag vom 7. Dez 2016
Antwort Antwort
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#1

Multicast Events: Var Parameter

  Alt 7. Dez 2016, 09:13
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 ?
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Multicast Events: Var Parameter

  Alt 7. Dez 2016, 09:18
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.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Multicast Events: Var Parameter

  Alt 7. Dez 2016, 09:49
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).
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Multicast Events: Var Parameter

  Alt 7. Dez 2016, 09:52
wäre das nicht gleich Callback ?

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Multicast Events: Var Parameter

  Alt 7. Dez 2016, 10:00
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
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Multicast Events: Var Parameter

  Alt 7. Dez 2016, 10:07
@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.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Multicast Events: Var Parameter

  Alt 7. Dez 2016, 10:11
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

Geändert von EWeiss ( 7. Dez 2016 um 10:31 Uhr)
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Multicast Events: Var Parameter

  Alt 7. Dez 2016, 10:41
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.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: Multicast Events: Var Parameter

  Alt 7. Dez 2016, 10:47
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
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

AW: Multicast Events: Var Parameter

  Alt 7. Dez 2016, 10:54
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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  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 05:01 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