AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Threads nacheinander ausführen

Ein Thema von TheMiller · begonnen am 1. Feb 2009 · letzter Beitrag vom 2. Feb 2009
 
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Threads nacheinander ausführen

  Alt 2. Feb 2009, 07:39
Ich würde das straight-forward machen, genauso wie Du es willst:

Threads nacheinander ausführen = Thread Nr.X startet Thread Nr.(X+1)

Du erstellst Dir eine Liste aller Threads und sorgst dafür, das ein Thread beim Beenden (OnTerminate) den nächsten Thread aktiviert.
Delphi-Quellcode:
Var
  MyThreadList : TList; // Of Threads
  CurrentThread : TMyThread;

Procedure TMainForm.RunNextThread (Sender : TObject);
Begin
  If MyThreadList.Count>0 Then Begin // Wenn noch Threads abzuarbeiten sind,
    CurrentThread := TMyThread(MyThreadList[0]); // nimm den nächsten,
    MyThreadList.Delete(0); // entferne ihn aus der Liste
    CurrentThread.Resume; // und führe ihn aus
  End
  Else Begin
    ShowMessage('Alle Threads wurden ausgeführt');
    FreeAndNil (MyThreadList);
  End;
End;
    
Procedure TMainForm.ExecuteAllThreads;
Var
  i : Integer;
  myThread : TMyThread;

Begin
{$IFDEF AllowAddingOfThreadsWhileExecuting}
  If Assigned (MyThreadList) Then
    Raise Exception.Create('Es sind noch nicht alle Threads abgearbeitet');
{$ELSE}
  If Not Assigned (MyThreadList) Then
    MyThreadList := TList.Create;
{$ENDIF}
  For i:=0 to MyThreadCount do Begin
    myThread := TMyThread.Create (...); // Suspended muss TRUE sein.
    myThread.OnTerminate := RunNextThread;
    myThread.FreeOnTerminate := True; // Kannst du so machen oder nicht.
    MyThreadList.Add(myThread);
  End;
  RunNextThread(nil);
End;
So kannst Du dir das 'warten auf den nächsten Thread' sparen. Die Variable 'CurrentThread' benötigst Du, wenn Du die Anwendung beenden willst, und noch nicht alle Threads abgearbeitet sind. Dann Terminierst Du den 'CurrentThread' und löschst einfach die MyThreadList.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz