AGB  ·  Datenschutz  ·  Impressum  







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

Multithreading Problem

Ein Thema von TurboMagic · begonnen am 30. Mär 2024 · letzter Beitrag vom 1. Apr 2024
Antwort Antwort
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#1

Multithreading Problem

  Alt 30. Mär 2024, 08:14
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
Angehängte Dateien
Dateityp: zip ThreadTest.zip (867,3 KB, 10x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
741 Beiträge
 
#2

AW: Multithreading Problem

  Alt 30. Mär 2024, 08:33
Habe nur kurz in deinen Code geschaut, aber der scheint hier zu hängen:

Task.Wait; Das willst du doch gar nicht !?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#3

AW: Multithreading Problem

  Alt 30. Mär 2024, 09:06
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
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#4

AW: Multithreading Problem

  Alt 30. Mär 2024, 09:36
Habe nur kurz in deinen Code geschaut, aber der scheint hier zu hängen:

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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#5

AW: Multithreading Problem

  Alt 1. Apr 2024, 11:43
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
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
677 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Multithreading Problem

  Alt 1. Apr 2024, 14:24
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.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:57 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