Zitat:
Wenn ich das mit MyThread.FreeOnTerminate := true machen lasse
Dann ist
FreeOnTerminate
nichts für diesen Fall. Wenn ein Thread FreeOnTerminate hast solltest du nach dem Starten die Referenz nie wieder anfassen. Ab dann ist nicht mehr definiert ob die Thread-Instanz bereits freigegeben worden ist oder nicht.
Zitat:
Aber wie soll ohne FreeOnTerminate freigegeben werden?
Du hast mit deinem
EvTerminate
doch schon genau die richtige Stelle dafür! Entferne es nach wie vor aus deiner Liste und danach gibst du den TThread frei.
Zu Problem 2 würde ich deinem Thread die Logik dafür nicht mitgeben. Das
EvTerminate
ist doch auch hier eigentlich die perfekte Gelegenheit dafür!