Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Variable eines Record geht beim Multithreading verloren

  Alt 28. Nov 2024, 13:49
Erstmal, TMessageManager ist nicht threadsafe.
Zumindest ist das aber so vorgesehen:
Delphi-Quellcode:
procedure TMessageManager.SendMessage(const Sender: TObject; AMessage: TMessage; ADispose: Boolean);
var
  Subscribers: TListenerList;
begin
  if AMessage = nil then
    raise Exception.CreateRes(@SArgumentInvalid);

  TMonitor.Enter(FListeners);
  try
    try
      if FListeners.TryGetValue(AMessage.ClassType, Subscribers) then
        Subscribers.SendMessage(Sender, AMessage);
    finally
      if ADispose then
        AMessage.Free;
    end;
  finally
    TMonitor.Exit(FListeners);
  end;
end;
Kannst du konkrete Fälle aufzeigen bei denen TMessageManager nicht thread-safe ist? (Ich will ja gar nicht ausschließen dass es die gibt.)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat