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 1 von 2  1 2      
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
911 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: "Unendlicher Progressbar"

  Alt 9. Jul 2020, 17:42
Vielleicht eine andere Lösung: In meiner App läuft eh im Hauptthread ein Timer mit, der eine Uhr laufen lässt.
Wenn ich im Thread etwas mache, wo ich den Fortschritt anzeigen möchte, dann setze ich dazu Werte in einem Objekt, auf das auch der Hauptthread Zugriff hat (hat auch ein toUpdate-boolean als Trigger).

Der Hauptthread schaut nun im Timer alle 250ms, ob toUpdate=true ist und aktualisiert dann die darin stehenden Werte [z.B. eine Liste von TLabel-Objekten mit dem anzuzeigenden Wert). Das funktioniert soweit gut und ist (in meinem Fall) kein Overhead, weil ich den Timer ja eh schon habe. Damit brauche ich auch keinerlei Synchronisationen.
  Mit Zitat antworten Zitat
skoschke

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

AW: "Unendlicher Progressbar"

  Alt 10. Jul 2020, 07:14
Zitat:
Ich würde den MainThread nur für die VCL (Fortschrittsanzeige) benutzen, die Arbeit in einem Parallelthread verrichten und in geeigneter Weise (abhängig von Zeit oder Fortschritt) den Anwender im MainThread informieren
Die Arbeit besteht aber aus Komponentenerzeugung und füllen derselben, das kann nicht in einen Thread ausgelagert werden.

Ich verwende die LMDTools, speziell das LMD-Panel, welches ganz schick per Maus aus dem Hauptformular ausgedockt und frei auf dem Bildschirm positioniert werden kann.
Davon gibt es mehrere und die laden in enthaltene WPTools-Richtexts Dokumente.
Und das braucht leider etwas Zeit und während der Erzeugung eines solchen Panels und Laden desselben mit Daten wird mein Fortschritts-Thread blockiert bzw. ein auf dem Hauptformular befindliches Label nicht aktualisiert...

Ciao
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: "Unendlicher Progressbar"

  Alt 10. Jul 2020, 10:38
Joar, Erstellen geht nur im richtigen Thread (MainThread, wo auch die VCL oder FMX läuft),

das holen der Daten ginge im Thread (bei Datenbanken und Dergleichen aber aufpassen, dass man die Connecion und Query dort erzeugt hat oder ob sie z.B. ein ThreadPooling unterstüzen)

das befullen kommt drauf an
> Edits, CheckBoxen und Dergleichen da ist das Befüllen via SendMessage threadsave
> bei ListBoxen und Grids kann man teilweise mit BeginUpdate den Haupthtread vom Update abhalten und so lange im Thread arbeiten





"kann" im Thread arbeiten = aber muß man nicht

Wenn man im Haupthtread arbeiten muß/will, dann muß man eben selbst für die regelmäßige Aktualisierung sorgen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: "Unendlicher Progressbar"

  Alt 10. Jul 2020, 11:59
Davon gibt es mehrere und die laden in enthaltene WPTools-Richtexts Dokumente.
Falls nicht schon geschehen kannst du mal wpInstantDisplayAfterLoad aus ViewOptionsEx entfernen. Vielleicht hilft das ja etwas.
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
 
#5

AW: "Unendlicher Progressbar"

  Alt 10. Jul 2020, 12:31
Danke für den Tip, leider ändert das nichts an der Ladezeit...

Ciao
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

AW: "Unendlicher Progressbar"

  Alt 10. Jul 2020, 12:34
Wie lange ist denn die Ladezeit (bzw. die Hänge-Dauer des Formulars)?
- für ein Dokument?
- für alle n Dokumente?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
skoschke

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

AW: "Unendlicher Progressbar"

  Alt 10. Jul 2020, 14:08
Beim ersten Panel / Dokument ca. 3 sec, alle weiteren gehen schneller (ca. 1 sec)

Ciao
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: "Unendlicher Progressbar"

  Alt 10. Jul 2020, 14:15
Kannst du mal den Code zeigen, der das Erzeugen der Komponenten und das Laden ausführt?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

AW: "Unendlicher Progressbar"

  Alt 10. Jul 2020, 14:30
Beim ersten Panel / Dokument ca. 3 sec, alle weiteren gehen schneller (ca. 1 sec)

Ciao
Stefan
Steuerst Du jedes erzeugen/laden selbst?

Dann würde ich wieder bei einem Label oder Panel landen...

Angenommen Du lädst 10 Komponenten, dann

Label.Caption := '1/10';
Label.Update;
Dokument1Laden;
Label.Caption := '2/10';
Label.Update;
Dokument2Laden;
...
Label.Caption := '10/10';
Label.Update;
Dokument10Laden;

Label.Visible := False;

Dann würde der Nutzer ja ausreichend sehen, dass sich etwas tut.

Alles andere wäre deutlich aufwendiger und würde nicht mehr bringen.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
570 Beiträge
 
Delphi 12 Athens
 
#10

AW: "Unendlicher Progressbar"

  Alt 10. Jul 2020, 19:01
Vielleicht eine andere Lösung: In meiner App läuft eh im Hauptthread ein Timer mit...
Ich finde diesen Vorschlag eigentlich sehr gut. Man könnte doch einfach eine globale Stringvariable nehmen, deren Inhalt auf der Form angezeigt und die vom Timer jede Sekunde oder so aktualisiert wird. In die Strecke der Komponentenerzeugung fügt man in diese Variable immer wieder Informationen über den gegenwärtigen Stand ein. Man kann über den Timer zusätzlich die Anzahl der verstrichenen Sekunden einfügen, so dass sich die Anzeige ändert, auch wenn die nächste Information noch nicht erreicht ist. So sieht der Anwender, dass die Anwendung nicht hängt. Das erscheint mir doch einfach und effektiv.

Geändert von Benmik (10. Jul 2020 um 19:04 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:09 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 by Thomas Breitkreuz