Thema: Delphi Multicast in Delphi

Einzelnen Beitrag anzeigen

Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.640 Beiträge
 
#2

Re: Multicast in Delphi

  Alt 20. Aug 2007, 08:48
Nachtrag:

Beim Unregister wird die Reihenfolge der Event-Registrierungen durcheinandergebracht, indem das letzte Event in der Liste die Lücke ersetzt und dann das Array verkürzt wird.

Ist die Reihenfolge wichtig, so müssen alle Events nach der Lücke nach vorne gezogen werden:
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
// unregister event from distributor
////////////////////////////////////////////////////////////////////////////////

procedure TFrmEventTest.UnregisterEvent(Subscriber: TObject);
var
   i: integer;
   found: boolean;
begin
   found := false;

   for i := 0 to Length(m_events) - 1 do
   begin
      if not found then
      begin
         found := TMethod(m_events[i]).Data = Subscriber;
      end
      else
      begin
         m_events[i-1] := m_events[i];
      end;
   end;

   if found then
   begin
      SetLength(m_events, Length(m_events) - 1);
   end;
end;
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat