![]() |
TTask.WaitForAll hängt
Ich steig nicht ganz durch wie waitforAll/waitforAny funktioniert.
Ich habe nach ![]() meinen Task hinzugefügt. Wenn ich diesen mit tasks[0].start; anstarte dann funktioniert alles einwandfrei. Packe ich dann dahinter TTask.WaitForAll(tasks); dann kommt er nie wieder. Keine UI Aktualisierung und meine gesamte UI ist danach wie wie eingefroren. Pack ich ein TTask.WaitForAll(tasks,10000); rein, dann rennt mein Task nach den 10sek durch und ich erhalte die gesamte UI Aktualisierung wieder. Meine UI Aktualiserung mache ich mit
Code:
Was übersehe ich hier? Was gibt dem WaitForAll die Info das es durch ist? Kein exit oder end in der procedure?
TThread.Synchronize(NIL,
Procedure begin end |
AW: TTask.WaitForAll hängt
Das WaitForAll blockiert den Hauptthread und somit wird das Synchronize nicht abgearbeitet. Wenn du auf das Ende der Task warten musst, dann ist das ganze Konzept vielleicht nicht das richtige.
|
AW: TTask.WaitForAll hängt
Ok verstehe.
Muss ich mir was anderes ausdenken. |
AW: TTask.WaitForAll hängt
Strate am Ende des Tasks einfach einen Timer, dessen code dann ausgeführt wird. So mache ich es auch immer. Nichts wird blockiert.
|
AW: TTask.WaitForAll hängt
Timer?
![]() Oder im Hauptthread nicht nur stumpf warten, sondern dabei auch die Messages verarbeiten. (siehe sowas wie Application.ProcressMessages oder ![]() |
AW: TTask.WaitForAll hängt
Bei mir senden Threads eine Message oder ändern eine Variable wenn sie fertig sind oder was zu berichten haben.
WaitFor macht nur Sinn wenn man das Ergebnis unbedingt braucht bevor man weiter machen kann. Schicke jemanden essen hohlen -> warte auf das essen -> stille deinen Hunger. :roll: |
AW: TTask.WaitForAll hängt
Die simpelste Lösung wäre am Ende der Task-Methode ein
Delphi-Quellcode:
aufzurufen.
TThread.Queue(nil, ...)
Wenn aber der Code nach dem Task-Aufruf erst auf das Ende der Task warten muss, dann ist die Task vielleicht nicht das richtige Konzept. |
AW: TTask.WaitForAll hängt
Zitat:
Ich habe nun in meinem Task die UI disabled und dann kann der Anwender nicht irgendwo herumdrücken. |
AW: TTask.WaitForAll hängt
Zitat:
|
AW: TTask.WaitForAll hängt
Zitat:
Meine Fortschrittsanzeige hat nicht mehr funktioniert weil ab 10.3 das mit application.processmessage geändert wurde. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:26 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