Thread beim Löschen eines statischen Objekts während des Entladens der DLL beenden führt zu Deadlock?

Ich habe eine Instanz (globales / statisches Objekt) der Klasse A in meiner verzögert geladenen DLL. Dieses Objekt enthält einen "Observer" -Thread, der zum ordnungsgemäßen Herunterfahren erforderlich ist. Beim Aufruf von FreeLibrary ist mir aufgefallen, dass mein Thread beim Löschen dieses statischen Objekts das Herunterfahren angefordert hat, sich aber an _endthreadex () hängt und einen Deadlock verursacht. Es ist egal, ob ich _endthreadex explizit oder implizit aufrufe. Es ist egal, ob das Objekt global oder statisch ist - das gleiche Ergebnis. Dieser Thread ist in ClassB eingebunden (implementiert durch eine Vorlage mit einer benutzerdefinierten Nachrichtenschleife). Es gibt eine Anforderung zum Herunterfahren des Threads (nach der Nachricht) und zum Folgen von WaitForSingleObject, die für ein bestimmtes Thread-Problem niemals zurückgegeben wird.

Die gleiche "Template-Thread-Klasse", die überall im Code und beim Herunterfahren verwendet wird, funktioniert hervorragend. Das einzige Problem beim Löschen von statischen obj. Ich denke, dass es in _endthreadex () eine Sperre gibt, die bereits beim Entladen und Löschen von statischen Objekten durch DLLs gesperrt ist.

Thema gestartet mit _beginthreadex. ps. Wenn ich das gleiche statische Objekt in der App instanziiert habe, wird die App ohne wesentliche Probleme geschlossen.

Irgendwelche Ideen, warum _endtreadex Deadlock verursacht? Wie vermeide ich es?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage