Ich habe einmal folgendes getan:
- Dem IDataManager
einmal eine Methode Dispose()
hinzugefügt
- Sie in TDataManager
mit FreeAndNil(FMyThread)
gefüllt
- Im Destruktor der MainForm einmal FDataManager.Dispose()
gesagt.
Dann bekommt er es hin, den schlafenden Thread zu resumen damit dieser sich dann beenden kann. Warum das so ist habe ich allerdings auch noch nicht verstanden.
Ich sehe nur, dass TThread.Resume ResumeThread aus der
WinApi aufruft und eben dieser Aufruf in "deinem" Fall 0 und in "meinem" 1 zurückgibt. Komisch.
Edit:
Ich sehe auch grade, der Aufrufstack der Dispose-Methode und des Destruktors deines TDataManager ist ein völlig anderer. Wahrscheinlich liegt das an der globalen Variable dass deren RefCount erst ziemlich spät auf Null fällt und zu dem Zeitpunkt hat die Host-Anwendung in ihrem Shutdown wahrscheinlich schon so komische Dinge gedreht dass man keine Threads mehr fortsetzen kann.
PPS: Ja, das scheint es zu sein.