Thema: Delphi thread

Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#21

Re: thread

  Alt 1. Aug 2006, 20:42
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat