Einzelnen Beitrag anzeigen

DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#10

Re: Deadlock beim stoppen eines Arbeiter Threads

  Alt 12. Mär 2007, 11:27
Hi,

also ich nutze jetzt ein Event, dass ich im Thread setzte wenn der Thread angehalten hat.

Delphi-Quellcode:
      while fShouldStopp do
      begin
        fStoppEvent.SetEvent; // Hier wird das Event gesetzt!!
        //fWoBinIch:=6;
        Sleep(1);
        if Self.Terminated then break;
        if Application.terminated then break;
      end;
    end;
     fStoppEvent.ResetEvent; // Hier wird das Event wieder zurückgesetzt
Nun mache ich folgendes in meinem Hauptthread:

Delphi-Quellcode:
*******************************************************************************
  Prozedur zum stoppen des Hintergrund Tasks
*******************************************************************************)
procedure TfrmMain.StoppBackgroundTask;
begin
  if Assigned(aCyclicDataThread) then
  begin
    aCyclicDataThread.PleaseStopp;
    WaitForSingleObject(aCyclicDataThread.fStoppEvent.Handle,INFINITE); // Warten auf das Event
  end; // of if Assigned(aCyclicDataThread) then
end;// of procedure TFrmMain.StoppBackgroundTask;
////////////////////////////////////////////////////////////////////////////////
PleaseStopp ist eine Prozedur des Threads und sieht folgendermaßen aus:

Delphi-Quellcode:
procedure TCyclicData.PleaseStopp;
begin
  fSyncObj.Acquire;
  try
    fShouldStopp:=true;
  finally
    fSyncObj.Release;
  end;

end;
Sollte ich jetzt hier irgendwas umstellen???
  Mit Zitat antworten Zitat