Einzelnen Beitrag anzeigen

Benutzerbild von s.h.a.r.k
s.h.a.r.k

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

Loggen mit Anzeige in Programm mit mehreren Threads

  Alt 27. Jun 2010, 20:17
Guten Abend zusammen

ich habe im Moment das Problem, dass mein Programm immer wieder ein einen Deadlock rein läuft, da auf der Synchronize()-Methode auf den MainThread gewartet wird, dieser aber gerade im Zustand wartend ist, da er auf die Freigabe einer CriticalSection wartet. Hier nochmal der Ablauf, wie ich glaube, dass er zum Deadlock führt:

1. Thread (ungleich MainThread) betritt Methode Log() und tritt in CriticalSection ein.
2. MainThread will auch einen Log-Eintrag schreiben, muss aber wohl warten, da sich schon ein Thread in der CriticalSection befindet.
3. In der Thread-Methode werden EventListener benachrichtigt, was via Synchronize gemacht wird, da unter Umständen visuelle Komponenten benachrichtigt werden können.
4. Da der MainThread gerade noch auf die Zuteilung wartet, kann dieser die Benachrichtigungen nicht abarbeiten -> Deadlock

Habt ihr auch eine entsprechende Log-Klasse?! Welche Lösungen nutzt ihr?

Man könnte es ja via Messages lösen, wobei ich dann wieder das Problem mit der Speicherfreigabe habe, da ich ja einen Record verschicke und ich nicht voraussetzen will, dass der EventListener den Record freigibt oder darin ein Flag im Record setzt. Ebenso würde dann das EventDispatcher/-Listener-Konzept nicht mehr so recht aufgehen und ich müsste alles überarbeiten.

Bisher habe ich leider noch keine andere Idee, wie ich das Problem lösen kann... Bin echt froh um jeden Gedanken.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat