AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Loggen mit Anzeige in Programm mit mehreren Threads
Thema durchsuchen
Ansicht
Themen-Optionen

Loggen mit Anzeige in Programm mit mehreren Threads

Ein Thema von s.h.a.r.k · begonnen am 27. Jun 2010 · letzter Beitrag vom 28. Jun 2010
 
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

AW: Loggen mit Anzeige in Programm mit mehreren Threads

  Alt 27. Jun 2010, 21:56
Jo, das ist korrekt. Ich habe es allerdings also globale Methode bzw. als Klassenmethode. Dazu kommt dann die CriticalSection als Klassenvariable des LogControllers. Und hier die beiden "InteralLog"-Methoden:

Delphi-Quellcode:
procedure TLogController.DoAfterWrite(const ALogRecord: TLogRecord);
begin
  FCriticalSection.Enter();
  try
    // save record for synchronized call
    FSyncAfterWriteLogRecord := ALogRecord;

    // synchronized call of event listener
    if (GetCurrentThreadId() = System.MainThreadID) then
      SyncDoAfterWrite()
    else
      Synchronize(SyncDoAfterWrite);
  finally
    FCriticalSection.Leave();
  end;
end;

procedure TLogController.SyncDoAfterWrite();
var
  i : Integer;
  mt : PMethod;
begin
  for i := 0 to FOnWriteLogListener.Count - 1 do
  begin
    mt := FOnWriteLogListener[i];
    if ((Assigned(mt)) and (Assigned(mt))) then
    begin
      try
        // call method
        TOnAfterWrite(mt^)(FSyncAfterWriteLogRecord);
      except
        {$MESSAGE 'Baustelle'}
      end;
    end;
  end;
end;
Und genau das Synchronize macht das Problem, so wie ich beschrieben habe -> Deadlock.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
 


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 08:25 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