Einzelnen Beitrag anzeigen

ASM

Registriert seit: 15. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: Erkennen ob irgendein Thread beendet wird.

  Alt 3. Mär 2012, 22:53
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;
  Mit Zitat antworten Zitat