völlig klar das dein Programm hängt und zwar deswegen:
Delphi-Quellcode:
procedure Thread_Nr_02.Execute;
begin
while not Terminated do begin
Synchronize(Hauptprogramm);
end;
end;
du syncronisierst ja durchweg (mit syncronize) den Thread mit dem Hauptprogramm-Thread. Und wenn es syncron zum Hauptprogramm läuft hängt das Hauptprogramm wenn der Thread hängt und umgekehrt.
Stell dir die Threads einfach mal als 2 Läufer vor. Normalerweise können beide unabhäng von einander Ihre strecke rennen und wenn einer eine Pause macht kann der andere trotzdem weiterlaufen. Mit Syncronize sorgst du allerdings dafür dass die Läufer sich die Hände reischen. Somit kann keiner mehr davon laufen und selbständig laufen weil er vom anderen festgehalten wird. Dadurch das du syncronize in einer Schleife hast halten sich die Läufer also immer wieder gegenseitig fest. Syncronize macht also nur sinn wenn der eine Läufer dem anderen was geben soll. Ansonsten sollten die beide Läufer möglichst nie Händchenhaltend rennen.
Oder anderes Beispiel: Du willst ein Stück Kuchen und eine Tube Haargel. Damit das schnell geht schickst du einen deiner Freunde zum Fleischer und den anderne ins Kaufland. Würde du beide zusammenketten (syncronize) würden die beiden Freunde die ganze Zeit miteinander quatschen und bräuchten länger als einer alleine. Deshalb sollte man die Freunde nie zusammenketten außer es ist unbedingt notwendig.
Wenn du mal wieder so einen Fehler wie "undefinierter Bezeichner" hast guck am besten als erstes in die Hilfe. Da steht in aller Regel bei funktionen dabei in welcher
Unit sich diese befinden.