Einzelnen Beitrag anzeigen

Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: Alle subThreads beenden beim programm beenden

  Alt 31. Jan 2004, 17:39
Hallo Meflin,
Ich dachte nach Deinem letzten Posting, Du möchtest einfach nur warten,
bis sich alle Threads von selbst beendet haben und danach erst dem Anwender
erlauben das Fenster zu schließen.

Wenn Du aber alle offenen Threads auf einem Sitz beenden möchtest
würde ich bei VCL-Threads folgendes machen:

Delphi-Quellcode:
// Form1 Private
   FMyThreadList: TObjectList;

// Form1 create
   // False unterbindet das automatische Freigeben des Objekts in der Liste nach Delete.
   FMyThreadList:= TObjectList.create(False);

// Beim Erzeugen der Threads
   FMyThreadList.Add(WorkerThread);


PROCEDURE TForm1.HandleTerminate(Sender: TObject);
// Behandlungsroutine, wenn Thread zerstört wird
// Wenn sich ein Thread selbst beendet hat, muß die
// FMyThreadList aktualisiert werden.
VAR
  i : integer;
BEGIN
  FOR i := 0 TO FMyThreadList.Count - 1 DO
    IF Sender = FMyThreadList[i] THEN
      BEGIN
        FMyThreadList.Delete(i);
        Break;
      END;
END;

PROCEDURE TForm1.FormDestroy(Sender: TObject);
// Alle Threads killen, und warten bis sie fertig sind.
VAR
  i : integer;
BEGIN
  TRY
    FOR i := FMyThreadList.Count - 1 DOWNTO 0 DO
      BEGIN
        WITH TWorkerThread(FMyThreadList[i]) DO
          BEGIN
            // Verhindern, dass HandleTerminate aufgerufen wird
            OnTerminate := NIL;
            Terminate;
            WaitFor;
          END;
        FMyThreadList.Delete(i);
      END;
  FINALLY
    FMyThreadList.Free;
  END;
END;
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat