AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Mehrere Threads nacheinander ausführen
Thema durchsuchen
Ansicht
Themen-Optionen

Mehrere Threads nacheinander ausführen

Ein Thema von Sascha L · begonnen am 8. Apr 2006 · letzter Beitrag vom 9. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
Sascha L

Registriert seit: 4. Jun 2004
Ort: Hamm
390 Beiträge
 
Delphi 2006 Professional
 
#1

Mehrere Threads nacheinander ausführen

  Alt 8. Apr 2006, 20:18
Hallo,

ich steh irgendwie auf'm Schlauch. Habe jetzt den ganzen Tag hier etliche Beiträge bzgl. Threads durchgelesen, konnte mein Problem aber immernoch nicht lösten

Ich möchte mehrere Threads NACHEINANDER ausführen.

D.h. erst wenn der erste Thread fertig ist, soll der 2. Thread ausgeführt werden... usw.

Wenn ich mit MeinThread.WaitFor arbeite, klappt das auch, aber während ein Thread ausgeführt wird, ist meine Anwendung eingefroren. Das darf aber nicht sein, da der Thread ständig etwas ins Caption eines Labels schreibt.

Wenn ich WaitForSingleObject(MeinThread,IFINITE) nutze, dann wird mein Thread nicht ausgeführt und meine Anwendung hängt bis ins unendliche.

Kann mir jmd. kurz den Code dafür geben, damit es klappt?

Ich habe einen dynamischen Thread-Array. Über eine for-Schleife führe ich "Resume" für einen Thread nach dem anderen aus. Aber da nicht alle Threads gleichzeitig ausgeführt werden sollen, was ja so passieren würde, soll er erst warten, bis der eine Thread zu ende ist, bevor er mit der for-Schleife weiterfährt und somit dann den nächsten Thread startet.

Gruß
Sascha
Sascha
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Mehrere Threads nacheinander ausführen

  Alt 8. Apr 2006, 20:20
du kannst dafür das OnTerminate des Thread nutzen bzw. kannst du ja innerhalb des Threads auch selbst ein Event auslösen in dem du dann den nächsten Thread startest.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: Mehrere Threads nacheinander ausführen

  Alt 8. Apr 2006, 22:55
Hi,

SirThornberry hat absolut recht, dann müßtest Du Die eine procedure Schreiben die Du dem OnTerminate des Threads zuweist, dann kannst Du in dieser Procedure den nächsten Thread starten.

Was mich allerdings wundert :

Du willst mehere Threads verwenden, diese aber nur hintereinander ausführen ?
Und das Hauptprogramm wartet solange ?

Der Sinn/Vorteil von Threads ist doch, das diese parallel im Hintergrund arbeiten können !
Ich kann ja noch nachvollziehen das Thread 2 erst starten darf, wenn Thread 1 zu Ende ist,
weil Thread 2 z.b. Daten von Thread 1 benötigt.
Aber warum im Hauptprogramm auf die Threads warten ?

So wie Du das bis jetzt beschrieben hast, werden Dir die Threads null Vorteil bringen.

Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Sascha L

Registriert seit: 4. Jun 2004
Ort: Hamm
390 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Mehrere Threads nacheinander ausführen

  Alt 9. Apr 2006, 09:39
Hm, dann muss ich einiges umschreiben. Mal gucken ob das klappt. Danke.


Warum ich die nacheinander aufrufen will?

Ich habe eine sehr rechenintensive Suche, die ich gerne in einen Thread auslagern möchte, damit die Hauptanwendung noch reagieren kann.

Die Threads kann ich nicht gleichzeitig ausführen, weil es dann elendig langsam werden würde, da die Festplatte hier der Flaschenhals ist. Ich kann ja nicht gleichzeitig c:\, d:\ und e:\ nach Dateien suchen. Da wird der Lesekopf ja total verrückt

EDIT:

Hab jetzt einfach die Aufrufe der Threads in einen eigenen Thread gepackt, und schon klappt es, dass die Hauptanwendung weiterhin reagiert

EDIT2:

Das klappt doch nicht. Da führt er immer nur einen Thread aus und die anderen beachtet er gar nicht
Sascha
  Mit Zitat antworten Zitat
Sascha L

Registriert seit: 4. Jun 2004
Ort: Hamm
390 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Mehrere Threads nacheinander ausführen

  Alt 9. Apr 2006, 12:12
Das kann doch einfach nicht angehen

Delphi-Quellcode:
   for i := 0 to Length(SearchThread) - 1 do begin
    SearchThread[i].Resume;
    SearchThread[i].WaitFor;
    SearchThread[i].Free;
     end;
Wenn SearchThread eine Länge von 2 hat, d.h. es gibt 2 Threads, dann führt er nur einen richtig aus.

Den ersten führt er aus (rückwärts, d.h. er fängt mit dem letzten an, hat wohl was mit der Compiler-Optimierung zu tun), warte brav bis er zu ende ist und gibt ihn frei. Danach führt er den zweiten aus, aber beendet ihn sofort ohne den Code von Execute auszuführen
Sascha
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Mehrere Threads nacheinander ausführen

  Alt 9. Apr 2006, 12:19
Kleiner Denkfehler!

Er führt schon den ersten aus und gibt den dann frei. Danach gibt es aber keinen zweiten mehr in der Liste...
Lasse die Schleife einfach mal rückwärts laufen.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Sascha L

Registriert seit: 4. Jun 2004
Ort: Hamm
390 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Mehrere Threads nacheinander ausführen

  Alt 9. Apr 2006, 12:21
Danke für den Tipp, aber leider funktionert es auch nicht. Er führt trotzdem nur den 2. Thread aus. Oder bei Dreien nur den dritten.
Sascha
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Mehrere Threads nacheinander ausführen

  Alt 9. Apr 2006, 12:45
wenn du ein Array von Thread hast dann so:
Delphi-Quellcode:
//Thread erstellen
for i := 0 to length(ThreadArray) - 1 do
begin
  ThreadArray[i] := TThread.Create(True);
  ThreadArray[i].OnTerminate := ThreadTerminateProc;
end;
fCurrThreadIndex := 0;
ThreadArray[fCurrThreadIndex].Resume;
[...]
procedure TForm1.ThreadTerminateProc(Sender: TObject);
begin
  inc(fCurrThreadIndex);
  if fCurrThreadIndex < Length(ThreadArray) then
    ThreadArray[fCurrThreadIndex].Resume;
end;
Ist ungetestet sollte aber die Vorgehensweise verdeutlichen...
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Sascha L

Registriert seit: 4. Jun 2004
Ort: Hamm
390 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Mehrere Threads nacheinander ausführen

  Alt 9. Apr 2006, 13:04
Danke, aber das klappt auch nicht.

Ich geb es auf

Das kann doch einfach nicht wahr sein, egal was ich mache, er fürt nur einen Thread aus und die anderen beendet er sofort.
Sascha
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#10

Re: Mehrere Threads nacheinander ausführen

  Alt 9. Apr 2006, 13:07
Dann zeig uns mal Deinen aktuellen Source.
Eigentlich hat SirThornberry schon alles richtig erklärt.

Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz