AGB  ·  Datenschutz  ·  Impressum  







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

"Unendlicher Progressbar"

Ein Thema von skoschke · begonnen am 8. Jul 2020 · letzter Beitrag vom 27. Jul 2020
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#21

AW: "Unendlicher Progressbar"

  Alt 9. Jul 2020, 13:42
KEINE VCL im Thread benutzen.

Wenn, dann als NonVCL direkt mit MSDN-Library durchsuchenCreateWindow, CreateDialog oder Dergleichen.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#22

AW: "Unendlicher Progressbar"

  Alt 9. Jul 2020, 13:45
Du darfst aus dem Thread nicht unsynchronsiert auf das Formular zugreifen.

Du könntest allerdings einen Dialog hiermit verwenden:
https://github.com/jaenicke/MTCL
Der funktioniert im Thread unabhängig von anderen Threads.

An solch einer Komponentensammlung scheint nicht wirklich Interesse zu bestehen, so dass ich diese auch nicht mehr weiterentwickelt habe, zumindest öffentlich. Aber das Prinzip funktioniert.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: "Unendlicher Progressbar"

  Alt 9. Jul 2020, 14:23
Du darfst aus dem Thread nicht unsynchronsiert auf das Formular zugreifen.
Richtig! Allerdings funktioniert synchronisiert zugreifen auch nicht, da der Hauptthread ja beschäftigt ist.

Besser wäre es, den SplashScreen im HauptThread als erstes zu erzeugen und anzuzeigen und regelmäßig bei jeder abgeschlossenen Aufgabe den Texteintrag zu aktualisieren. Threads würde ich da komplett außen vor lassen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
560 Beiträge
 
Delphi 12 Athens
 
#24

AW: "Unendlicher Progressbar"

  Alt 9. Jul 2020, 15:09
Wenn ich das richtig verstanden habe, dann ist doch der MainThread ein VCL-Thread, der pausenlos läuft und auf Nachrichten wartet. Wenn ich jetzt alle Arbeiten in separate Threads verlege, dann müsste doch der MainThread frei sein und alle Anzeigen verzögerungsfrei und nicht blockierend verarbeiten. Es müsste also theoretisch alles ganz einfach sein. Tatsächlich klappt das auch, aber schwierig wird es, wenn man Application.ProcessMessages vermeiden will. Ich bringe ohne z.B. einen Timer unter AsyncCalls nicht zum Laufen. Und die Einarbeitung in die OTL ist schwieriger als gedacht, und bisher ist AsyncCalls auch schneller.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: "Unendlicher Progressbar"

  Alt 9. Jul 2020, 15:16
Es müsste also theoretisch alles ganz einfach sein.
Theoretisch - ja. Trotzdem ist es in den meisten Fällen besser auf Threads ganz zu verzichten. Insbesondere wo es - wie in diesem Fall - um Arbeiten mit VCL-Komponenten geht.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
skoschke

Registriert seit: 6. Jan 2009
523 Beiträge
 
Delphi 10.4 Sydney
 
#26

AW: "Unendlicher Progressbar"

  Alt 9. Jul 2020, 15:39
So, nun habe ich einen Versuch ohne Thread gestartet:

Soll der Splashscreen angezeigt werden, mache ich ein (bisher unsichtbares) Panel sichtbar und setze seine Caption.
Danach läuft die Lange Erzeugungs-Routine.

Lasse ich das Programm laufen, ist das Panel sichtbar, aber die Caption fehlt!
Die kommt erst wenn die lange Routine fertig ist....
Ein Panel.Repaint, Refresh, etc. hat da nichts verbessert, das kann doch nicht so schwer sein, ich beiße langsam in die Tischkante!

Ciao
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#27

AW: "Unendlicher Progressbar"

  Alt 9. Jul 2020, 15:41
Repaint, ProgessMessages oder Dergleichen ... wurde alles schonmal genannt, auch das Warum.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

AW: "Unendlicher Progressbar"

  Alt 9. Jul 2020, 15:44
Wenn das Holen der Daten 90% der Zeit braucht und das Erzeugen und füllen der Controls 10%, dann könnte es Sinn machen, das Holen der Daten in einen Thread auszulagern.

Der einzige Vorteil wäre allerdings, dass die Anwendung reaktiv bleibt und irgendein Pinökel da irgendwie rumrödeln kann.
Im Ergebnis hätte man eine Rödel-Anzeige und irgendwann - schwupps - werden die Controls erzeugt.

Das macht u.U. deutlich Mehraufwand und kann auch Probleme erzeugen, wenn man die Synchronisation nicht korrekt regelt.


Diese 90:10-Verteilung würde ich aber im genannten Beispiel nicht erwarten.
Insofern würde ich es wie Uwe machen und z.B. in einer Statusbar oder Splash-Formular kurze Zwischenstände anzeigen.

1/10 ... Daten werden gesammelt (ca. 2 min, also heute bis ca. 18:02 Uhr)
2/10 ... alles wird vorbereitet (ca. 5 min, also heute bis ca. 18:07 Uhr)
...
10/10 ... ferdisch (hat 2 h gedauert)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#29

AW: "Unendlicher Progressbar"

  Alt 9. Jul 2020, 15:53
Diese Pinökel würde aber auch verhinder dass Windows daherkommt, von wegen "Programm reagiert nicht" und das Programm womöglich abgeschossen wird. (egal ob jetzt mit Thread oder regelmäßigem Refresh)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: "Unendlicher Progressbar"

  Alt 9. Jul 2020, 15:56
Ein Panel.Update nach dem Setzen von Panel.Caption sollte aber funktionieren.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    


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 12:02 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