Wie kann ich also auf das Ende eines Thread reagieren?
Egal ob über TThread oder direkt über die
WinAPI erstellt.
Wäre das im konkreten Fall mit Hilfe eines Eventhandlers vielleicht wie folgt zu realisieren, wobei das hier nur als Grundgerüst konzipiert ist, da ich die Einzelheiten des speziellen Projekts nicht kenne ?:
Delphi-Quellcode:
type
TMySpecialthread = class(TThread)
Begin
{...}
protected
procedure Execute; override;
{...}
end;
Var
EventHandle: THandle;
ThreadHandle: THandle;
MySpecialthread: TMySpecialthread;
procedure ToDoAfterMySpecialThreadHasFinished; stdcall;
Var ObjRtn: Cardinal;
begin
ObjRtn := WaitForSingleObject(EventHandle, INFINITE);
MySpecialThread.Terminate;
Showmessage('MySpecialThread is Ready'); // eben nur als Beispiel
{ .. DoToListe abarbeiten,
was nach Ende des MySpecialThread zu erledigen ist ... }
ExitThread(0);
end;
procedure MySpecialthread.Execute;
begin
{... do it .....}
SetEvent(EventHandle);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
ThreadID: Cardinal;
begin
EventHandle := CreateEvent(Nil, True, False, 'MySpecialThreadEvent');
ThreadHandle := CreateThread(nil, 0, @ToDoAfterMySpecialThreadHasFinished, nil, 0, ThreadId);
MySpecialThread:=TMySpecialThread.create(false);
MySpecialThread.FreeOnTerminate:=false; // oder nach Bedarf true
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Enabled:=false;
MySpecialThread.Resume;
end;