Einzelnen Beitrag anzeigen

Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.300 Beiträge
 
Delphi 12 Athens
 
#8

AW: mehrere Threads sauber beenden

  Alt 10. Jan 2011, 10:42
ok... diese Variante hatte ich wie gesgt schon. Allerdings nicht mit Sleep.

Ich geh dann mal zum probieren....bis gleich.

Soooo....
Delphi-Quellcode:
destructor Klasse1.Destroy; // Kommt auf das gleiche raus wie CloseQuery
var I: Integer;
begin
  while not (FThreadList.Count = 0) do
  begin
      if Assigned((FThreadList.Items[0] as TXWebLoader)) then
      begin
        while FThreadList.Count > 0 do
        begin
          for I := FThreadList.Count - 1 to 0 do
          begin
           (FThreadList.Items[0] as TXWebLoader).Terminate;
            // in XE ist Terminated als protected deklariert ! Geht schon mal nicht !
            while not (FThreadList.Items[0] as TXWebLoader).Terminated do
            begin
              Sleep(200);
            end;
          end;
        end;
        FThreadList.Delete(I);
      end;
  end;
also Terminated auskommentiert.
Delphi-Quellcode:
destructor TXWeb.Destroy;
var I: Integer;
begin
  while not (FThreadList.Count = 0) do
  begin
      if Assigned((FThreadList.Items[0] as TXWebLoader)) then
      begin
        while FThreadList.Count > 0 do
        begin
          for I := FThreadList.Count - 1 to 0 do
          begin
           (FThreadList.Items[0] as TXWebLoader).Terminate;
           Sleep(200);
          end;
        end;
        FThreadList.Delete(I);
      end;
  end;
bei beiden Varianten im Execute Sleep(100) eingefügt...

Ergebnis: Die Threads stehen wie eine eins und das Programm ist in einer Endlosschleife.

Geändert von haentschman (10. Jan 2011 um 11:05 Uhr)
  Mit Zitat antworten Zitat