Also Free und Destroy sollten dir eigentlich klar sein. Destroy ist der Destruktor und Free ruft intern den Destructor auf und führt sicherheitsabfragen durch.
Terminate setzt innerhalb der Threadinstanz eine Variable. Die mit Terminated innerhalb des Threads überprüft werden kann. Zum sauberen Beenden des Threads.
Der Thread wird mit Resume gestartet. Bzw Automatisch, wenn der Konstruktor mit False erzeugt wurde. Der Thread wird immer wom Betriebssystem aufgerufen und dabei wird die Execute Methode aufgerufen. Wenn du Execute selber aufrufst wirst du niemals einen richtigen Thread haben. Also immer Resume oder via Konstruktor automatisch starten lassen.
Thread Tutorial.
Zu deinem Programm: Ob du da mehr als einen Thread benötigst wage ich mal zu bezweifeln. Denn du greifst auf deine Festplatte zu. Wenn du nur einen Thread hast, dann kann die Festplatte eine Datei am Stück einlessen und gut. Bei 4 Threads muss die Festplatte immer zwischen 4 Dateien hin und her springen. Das Springen kostet Zeit und deine Threads müssen dann auf die Platte warten. Im Endeffekt wird es dadurch sogar noch langsamer als nur mir einem, da bei Einem das Springen wegfällt. Mehrere Threads lohnen sich erst bei Berechnungen auf der CPU oder beim der Komminikation mit verschiedenen IPs erst richtig. Jedes mal wenn 2 Threads auf die selben Sache zugreifen ist die Wahrscheinlichkeit groß, dass einer Warten muss.
Ich persönlich würde aber eher einen Manager vorschalten. Also deine GUI übergibt X Dateien an einen Manager und dieser verwaltet die Threads. Die Threads würden dann auch nur eine einzige Aufgabe bewältigen und sich dann wieder beenden. Es wäre auch möglich, dass die Threads dauerhaft laufen. Aber dann musst du zu viel synchronisieren und aufpassen, dass bloß nichts schief geht. Da ist es einfacher, wenn die Threads so einfach wie möglich sind. Ist ein Thread fertig (OnTerminate), dann startet der Manager einen neuen. So lange bis deine Dateiliste komplett abgearbeitet ist.
Du könntest die Dateien auch in JobObjekte verpacken. Also eine Job Klasse heißt dann TJobReadTags oder so. Die sind von einer Basisi und ein Thread führt dann nur noch einen Job aus. Die Klasse weiß, dass sie Tags lesen soll also tut sie es. Ist der Thread fertig wird der Job inklusive Ergebniss wieder an die GUI übergeben und fertig. Dann könntest du die unterschiedlichsten Jobs in Threads verpacken. Und du könntest auch verhindern, dass 2 Jobs des Typen XYZ gleichzeitig gestartet werden wärend der Typ HKL bis zu 4 mal gestartet werden kann. Die Maximalanzahl der Threads würde auch der Manager regeln.
Ich hoffe das war jetzt nicht zu verwirrend. Wenn doch. Bitte nachhacken.
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.