Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Multithreading Problem (https://www.delphipraxis.net/214889-multithreading-problem.html)

TurboMagic 30. Mär 2024 07:14

Multithreading Problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

eigentlich will ich was ganz einfaches machen, aber irgendwie
blick' ich's noch nicht.

Im Anhang ist ein Demo Projekt.
Es besteht aus einem Hauptformular und einem kleinen Fortschrittsanzeige Formular.

Klickt man im hauptformular den Button an, soll das Fortschrittsformular angezeigt
werden und in einem Task etwas bearbeitet werden (hier durch eine Schleife mit einem
Sleep drin simuliert). Der Fortschritt soll im Fortschrittsdialog angezeigt werden.

Mir ist klar, dass ich die GUI Anzeige Synchronisieren muss weil es sonst knallt.
So wie's jetzt läuft, scheinen alle diese Thread.Queue Aufrufe aber erst nach
vollständiger AUsführung der Hintergrund Aktion aufgerufen zu werden...

Hat jemand eine Idee?

Grüße
TurboMagic

Olli73 30. Mär 2024 07:33

AW: Multithreading Problem
 
Habe nur kurz in deinen Code geschaut, aber der scheint hier zu hängen:

Delphi-Quellcode:
Task.Wait;
Das willst du doch gar nicht !?

Uwe Raabe 30. Mär 2024 08:06

AW: Multithreading Problem
 
Zitat:

Zitat von TurboMagic (Beitrag 1535108)
eigentlich will ich was ganz einfaches machen

Das passt aber irgendwie nicht zum Thema Multithreading :)

Als ergänzende Lektüre empfehle ich dir meinen Artikel Async Tasks in VCL Projects

Uwe Raabe 30. Mär 2024 08:36

AW: Multithreading Problem
 
Zitat:

Zitat von Olli73 (Beitrag 1535113)
Habe nur kurz in deinen Code geschaut, aber der scheint hier zu hängen:

Delphi-Quellcode:
Task.Wait;
Das willst du doch gar nicht !?

In der Tat - das ist die Ursache für den Blocker.

Allerdings crasht das Programm beim Beenden, wenn man den Progress-Dialog abbricht. Da versucht dann ein OnProgress aus der Queue auf die nicht mehr existierende Progressbar zu schreiben. Genau solche Probleme werden auch in meinem Artikel behandelt.

Eine gute Empfehlung für eine tiefergreifende Lektüre ist übrigens das Buch Delphi Event-based and Asynchronous Programming von Dalija Prasnikar, was auch in dem Artikel verlinkt wird.

TurboMagic 1. Apr 2024 10:43

AW: Multithreading Problem
 
Hallo,

danke für die Infos, ja, das Wait war das Problem. Das mit dem Cancel is tmir durchaus bewußt,
in dem Programmteil wird's den Cancel Button aber nicht geben.

Grüße
TurboMagic

Sinspin 1. Apr 2024 13:24

AW: Multithreading Problem
 
Cancel Funktionen die Hintergrundprozesse abbrechen können sind aber durchaus sinnvoll.
Nur muss man sich überlegen wie man das umsetzt. Der Task sollte ein Signal erhalten und ein weiteres Signal liefern wenn er fertig ist mit abbrechen.
Anschließend geht ein Programm dann auch zu ohne das es mit Nullpointern um sich wirft.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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