AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TTask.WaitForAll hängt

Ein Thema von Smiley · begonnen am 24. Aug 2019 · letzter Beitrag vom 31. Okt 2022
Antwort Antwort
Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
210 Beiträge
 
Delphi 12 Athens
 
#1

AW: TTask.WaitForAll hängt

  Alt 24. Aug 2019, 17:30
Weil ich wissen will wann der Task beendet ist.
Besser wäre es natürlich ich bekäme einen event der mir sagt, dass der Task fertig ist.
Das ist aber erst der nächste Schritt.
wie das geht habe ich noch nicht gefunden.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TTask.WaitForAll hängt

  Alt 24. Aug 2019, 17:49
So ganz konkret kann ich jetzt nicht helfen, aber hier mal 3 Videos zu Threads & Co:

https://youtu.be/WOc89TF8l-8
https://youtu.be/Jhcpgjs1uPA
https://youtu.be/0p7kbE8TkWI

Im ersten sind Tasks explizit mit als Thema aufgeführt.

(Werde ich mir auch gleich nochmal anschauen. Ich war sowieso gerade auf der Suche nach interessanten Programmier-Videos. )
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#3

AW: TTask.WaitForAll hängt

  Alt 24. Aug 2019, 18:23
Also Wait heißt übersetzt Warten und genau das passiert.

Der Aufruf WaitForAll oder WaitForAny ist blockierend.
Diese Repeat Schleife kannst du ersatzlos streichen, denn wenn du da hin kommst dann ist schon alles vorbei.
  Mit Zitat antworten Zitat
Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
210 Beiträge
 
Delphi 12 Athens
 
#4

AW: TTask.WaitForAll hängt

  Alt 24. Aug 2019, 18:46
Das ist schon klar Schokohase, dafür war es auch gedacht, das Repeat habe ich lediglich nicht gelöscht, aber dorthin komme ich ja nie, genau das ist ja das Problem.
Das WaitForAll wartet eben unendlich, auch wenn der Task lange abgelaufen ist, zum Reppeat komme ich ja gar nicht.

Danke Stahli für die Links, das erste Video von Bernd Ua kannte ich noch nicht, das ist ganz gut.
Das von Daniel war auch gut beschäftigt sich aber hauptsächlich nur mit dem Deadlock und Synchronize, bei Bernd Ua ist etwas mehr Code zu sehen.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: TTask.WaitForAll hängt

  Alt 24. Aug 2019, 18:51
Weil ich wissen will wann der Task beendet ist.
Aber der Code wird doch erst ausgeführt, wenn die ShowMessage angezeigt wird. Und da ist der Task schon fertig. Der Code wird ja linear abgearbeitet.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
210 Beiträge
 
Delphi 12 Athens
 
#6

AW: TTask.WaitForAll hängt

  Alt 24. Aug 2019, 19:01
Zum showmessage komme ich nicht, da er ja in waitforall hängen bleibt.
Man könnte hier zu beginn von der Clickroutine den Butto auf disabled stellen und nach waitforall auf enabled, dann erkennt man einen Sinn in der Abfrage
  Mit Zitat antworten Zitat
Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
210 Beiträge
 
Delphi 12 Athens
 
#7

AW: TTask.WaitForAll hängt

  Alt 24. Aug 2019, 19:05
procedure TForm1.Button1Click(Sender: TObject);
var
lstatus: boolean;

begin
lStatus:=False;
LTaskRun := true;
Setlength(tasks, 1);
Button1.enabled:=False;

tasks[0] := TTask.Create(
procedure
begin
DirList; // Hier ist das Prgramm das lange braucht und im Hintergrund läuft
end);
tasks[0].Start;

lstatus := TTask.WaitForAll(tasks);
// Hier kommt man nie hin.
Button1.enabled:=True;

end;
  Mit Zitat antworten Zitat
Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
210 Beiträge
 
Delphi 12 Athens
 
#8

AW: TTask.WaitForAll hängt

  Alt 24. Aug 2019, 20:19
Habe mir jetzt alle Videos angesehen,
Das zeite Video von Olaf Monien https://youtu.be/Jhcpgjs1uPA ist das Beste für meine Zwecke um mit TTask zu arbeiten.
Das dritte von Daniel Wolf ist auch sehr gut (kannte ich schon) beschreibt aber mehr nur die Problematik Synchronisierung und der Deadlock vermeidung.

Danke Stahli für die Links

Ich weiß zwar noch nicht warum das mit dem WaitforAll nicht funktioniert, vermute aber dass es an einer anderen Stelle eingesetzt wird und normalerweis so auch nicht benutzt wird.
Davon ist in den Videos auch nicht die Rede.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

AW: TTask.WaitForAll hängt

  Alt 24. Aug 2019, 20:29
Bleibt eventuell DirList hängen? Wie sieht der Code dazu aus?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
210 Beiträge
 
Delphi 12 Athens
 
#10

AW: TTask.WaitForAll hängt

  Alt 24. Aug 2019, 20:58
Nein, wenn ich das WaitForAll weglasse funktioniert alles problemlos.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:03 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-2025 by Thomas Breitkreuz