Zumeist bin ich bisher mit den Threads klar gekommen, habe aber jetzt einen etwas anders gearteten Fall (Suche im Netz brachte mich bisher leider nicht wirklich weiter). Ich muss den Thread öfters starten, mit anderen Werten, dieses neue Starten bekomme ich nicht hin:
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
// TestThread.Execute;
TestThread.Resume;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
TestThread:=TTestThread.Create(True);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if not TestThread.Finished then begin
TestThread.Terminate;
TestThread.WaitFor;
end;
end;
{ TTestThread }
procedure TTestThread.SendeCaption;
begin
Form1.Caption:='Test ' + inttostr(random(100));
end;
procedure TTestThread.Execute;
begin
Synchronize(@SendeCaption);
end;
constructor TTestThread.Create(CreateSuspended: boolean);
begin
FreeOnTerminate := True;
inherited Create(CreateSuspended);
end;
Schreibe ich statt Resume, Execute (lt. Wiki darf man das nicht), wird der Thread mehrmals gestartet, beim Form1.Destroy hängt sich das Prog bei WaitFor auf. Execute funktioniert aber nicht, wenn man z.B. CreateSuspended=False macht.
Wie ist das richtige Vorgehen?
Danke!
Michl
[Edit] warum das jetzt im Forum "Netzwerk" gelandet ist, weiss ich nicht, hatte eigentlich Freepascal gewählt (evtl. der Uhrzeit geschuldet
