Wo ich hier grade den Check auf Suspended sehe:
Bitte
nie mit Suspend() arbeiten, wenn es sich in irgendeiner Weise verhindern lässt oder man
genau weiß, was man tut.
WaitForSingleObject ist hier eine weitaus bessere Lösung.
Ich weiß nicht, ob dieses Problem mitlerweile behoben ist, aber in einigen Delphi Versionen war ein Szenario möglich, in dem der Thread grade Speicher durch den Memory Manager (direkt oder indirekt) angefordert bzw. freigegeben hat, als er suspendiert wurde. Der Memory Manager hatte vorher eine Critical Section oder Ähnliches betreten und durch den Suspend nicht mehr verlassen. Dadurch führte dann jede folgende Speicheralloziierung im Hauptthread sofort zu einem Deadlock.