OnIdle prüfen
TApplicationEvents
z.B. Messen wie lang ein Verarbeitungsdurchlauf dauert
GetTickCount, QueryPerformanceCounter, TStopwatch oder sonstwas
oder die CPU-Auslastung des Hauptthreads messen
GetSystemTimes
Und da der Hauptthread ja auch nur ein Thread ist, ist es nicht verboten TThread zu benutzen, und dort gibt es seit 'ner Weile so Einiges
TThread.GetSystemTimes(...)
TThread.GetCPUUsage(...)
TThread.GetTickCount
TThread.GetTickCount64
Das sind ClassFunctions, also können genau so benutzt werden,
aber auch für Nicht-Klassenfunktionen, kann man sich einen "Dummy"-TThread geben lassen.
z.B. TThread.Current.ThreadID
Und falls jemand wissen will, wieviele Threads man machen kann
TThread.ProcessorCount
Oder man nehme etwas, was das für Einen übernimmt.
TWorkStealingQueue
TThreadPool bzw. TParallel
und vielleicht auch noch TTask statt TThread (wobei das hier ja nicht nöig wäre, aber für andere Anwendungsfälle erwähnt)