Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Loggen mit Anzeige in Programm mit mehreren Threads

  Alt 28. Jun 2010, 00:33
Hmm...es gibt nur eine Critical Section aber mehrere Resourcen die angesprochen werden.
Jedes Ziel müsste durch eine eigene Critical Section abgesichert werden.

Im Moment ist es so, dass jede Log-Aktion im Kontext des Hauptthreads ausgeführt wird.
Aber der Hauptthread kann blockieren und führt so zum Deadlock.

Ich vermute mal es gibt zwei Arten von OnWriteLogListener Event-Handler:
a.) Schreiben in eine Logdatei und b.) Ausgabe auf einem VCL Control.
Beiden Arten sind grundsätzlich verschieden und müssen unterschiedlich behandelt werden.

Zu a.): hier würde man einfach eine Critical Section pro Logdatei verwenden.
Zwischen dem Eintritt in die Critical Section und dem Austritt kann eigentlich nichts passieren; auf jeden Fall kann dazwischen nichts blockieren.

Zu b.): das wird schon kniffliger. Man braucht eine Queue in die die LogRecords eingefügt werden. Dann wird geschaut ob man sich im Hauptthread befindet.
Falls ja, solange LogRecords aus der Queue entfernen und auf's VCL-Control schreiben, bis sie leer ist.
Falls nein, wird eine Synchronize()-Botschaft an den Hauptthread geschickt,
der dann die Queue leert und weiterverarbeitet.
  Mit Zitat antworten Zitat