So direkt sehe ich da keine Auffälligkeit (außer der Verwendung von Resume anstelle von Start), aber das ganze Design ist IMO suboptimal und fehleranfällig, besonders wenn die verwendete
DB-Konnektion nicht multithread-tauglich ist.
Anstatt jedesmal einen neuen Thread zu erzeugen würde ich
einmal zu Beginn einen Thread erzeugen der dann in einer Schleife in seiner Execute Methode auf einen Event (TSimpleEvent z. B.) wartet, mit einem Timeout, der dem gewünschten Aktivitätsintervall entspricht. Wenn der Event "aufwacht" prüft der Kode zuerst, ob Terminated True ist; wenn ja verläßt er die Schleife und der Thread beendet sich. Wenn Terminated False ist prüft der Kode den Rückgabewert der WaitFor-Methode des Events; das sagt ihm, wieso der Event ausgelöst hat. Wenn das der Timeout war setzt der Kode den Event wieder auf "not signalled" und ruft dann die Methode auf, die die Arbeit mit der Datenbank erledigt. Wenn es nicht der Timeout war sollte die Arbeitsschleife ebenfalls beendet werden. Dadurch kann man den Thread kontrolliert von außen beenden, in dem man den Event auslöst.