AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein DEB DelphiEventBus vs. System.Messaging.TMessageManager
Thema durchsuchen
Ansicht
Themen-Optionen

DEB DelphiEventBus vs. System.Messaging.TMessageManager

Ein Thema von Rollo62 · begonnen am 11. Mai 2016 · letzter Beitrag vom 12. Mai 2016
Antwort Antwort
Rollo62

Registriert seit: 15. Mär 2007
4.165 Beiträge
 
Delphi 12 Athens
 
#1

DEB DelphiEventBus vs. System.Messaging.TMessageManager

  Alt 11. Mai 2016, 18:26
Hallo zusammen,

ich würde mal gerne eure Meinung zu den Frameworks s.o. hören:
DEB: DEB
TMessageManager: http://docwiki.embarcadero.com/Libra...MessageManager

Ok, DEB nutzt womöglich Attribute um Methoden zu binden, das ist schön und modern, aber was bringt mir
das ausser etwas weniger Zeilen zu schreiben.
Auch kann DEB den ThreadType für die Synchroisation vorgeben, das ist schon interessanter.

Die machen ja prinzipiell beide Event Messaging, wobei TMessageManager orginal in Delphi/Fmx integriert ist.

Warum sollte ich da so etwas wie DEB benutzen, evtl. weil performanter oder andere Vorteile ?

Ich nutze im Moment den TMessageManager, und frage mich ob es irgendeinen Sinn macht über DEB nachzudenken.

Rollo

Geändert von Rollo62 (11. Mai 2016 um 18:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: DEB DelphiEventBus vs. System.Messaging.TMessageManager

  Alt 11. Mai 2016, 19:33
Der wichtigste Vorteil ist die Möglichkeit die Nachrichten auch asynchron zu versenden.

Ein kurzer Blick in die Quellen lässt mich aber noch an der Qualität zweifeln
Da ist so einiges beim Thema Threading und Locking noch im Argen ... ist allerdings auch noch recht frisch das Projekt und schauen wir mal wie der weitere Reifeprozess vorangeht.

Interessant ist es auf jeden Fall
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.165 Beiträge
 
Delphi 12 Athens
 
#3

AW: DEB DelphiEventBus vs. System.Messaging.TMessageManager

  Alt 11. Mai 2016, 23:16
Hallo Sir Rufo,

dankesehr für deine Einschätzung.

So ähnlich sehe ich das auch, und würde nur damit anfangen wenn es einen echten Vorteil bietet.
Schliesslich schleppt man schon genug Ballast mit sich rum.
Dann werde ich erstmal bei TMessageManager bleiben, das funktioniert ja auch und ist Teil der System units.

Rollo
  Mit Zitat antworten Zitat
TiGü

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

AW: DEB DelphiEventBus vs. System.Messaging.TMessageManager

  Alt 12. Mai 2016, 09:11
So kann man zumindest relativ leicht aus einen abgespaltenen Thread in den VCL-Mainthread senden:

Delphi-Quellcode:
unit HierKönnteDeinUnitNameStehen;

interface

uses
  System.SysUtils,
  System.Classes,
  System.Messaging;

type
  TMessageManagerHelper = class helper for TMessageManager
    procedure SendMessageToQueue(const Sender: TObject; AMessage: TMessage; ADispose: Boolean = True);
  end;

implementation

{ TMessageManagerHelper }

procedure TMessageManagerHelper.SendMessageToQueue(const Sender: TObject; AMessage: TMessage; ADispose: Boolean = True);
begin
  TThread.Queue(nil,
    procedure
    begin
      Self.SendMessage(Sender, AMessage, ADispose);
    end
    );
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#5

AW: DEB DelphiEventBus vs. System.Messaging.TMessageManager

  Alt 12. Mai 2016, 09:22
Und so geht es asynchron aus dem Hauptthread - auf Wunsch auch mit Verzögerung:

Delphi-Quellcode:
uses
  System.SysUtils,
  System.Classes,
  System.Messaging,
  System.Threading;

type
  TMessageManagerHelper = class helper for TMessageManager
    procedure SendMessageAsynch(const Sender: TObject; AMessage: TMessage; ADelayMS: Cardinal = 0; ADispose: Boolean = True); overload;
    procedure SendMessageAsynch(const Sender: TObject; AMessage: TMessage; ADispose: Boolean = True); overload;
  end;

procedure TMessageManagerHelper.SendMessageAsynch(const Sender: TObject; AMessage: TMessage; ADelayMS: Cardinal;
  ADispose: Boolean);
begin
  TTask.Run(
    procedure
    begin
      if ADelayMS > 0 then begin
        Sleep(ADelayMS);
      end;
      TThread.Queue(nil,
        Self.SendMessage(Sender, AMessage, ADelayMS);
    end);
end;

procedure TMessageManagerHelper.SendMessageAsynch(const Sender: TObject; AMessage: TMessage; ADispose: Boolean);
begin
  SendMessageAsynch(Sender, AMessage, 0, ADispose);
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TiGü

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

AW: DEB DelphiEventBus vs. System.Messaging.TMessageManager

  Alt 12. Mai 2016, 09:31
@Uwe:

Das kompiliert bei mir aber nur, wenn ich den Self.SendMessage Aufruf in einer procedure verbastle:

Delphi-Quellcode:
procedure TMessageManagerHelper.SendMessageAsynch(const Sender: TObject; AMessage: TMessage; ADelayMS: Cardinal; ADispose: Boolean);
begin
  TTask.Run(
    procedure
    begin
      if ADelayMS > 0 then
      begin
        Sleep(ADelayMS);
      end;
      TThread.Queue(nil,
        procedure
        begin
          Self.SendMessage(Sender, AMessage, ADispose)
        end)
    end);
end;
Ansonsten ne schöne Idee mit der Verzögerung!
  Mit Zitat antworten Zitat
Antwort Antwort


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:00 Uhr.
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-2025 by Thomas Breitkreuz