Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Progressbar einbinden (https://www.delphipraxis.net/138767-progressbar-einbinden.html)

himitsu 28. Okt 2009 16:17

Re: Progressbar einbinden
 
Zitat:

Zitat von isilive
Die unterschiedlichen Rechnergeschwindigkeiten sind gar kein so grosses Problem. Wenn meine Progressbar ca. 5 mal pro Sekunde aktualisiert wird, dann ist das schon voll in Ordnung.

Das meine ich ja, aber sowas bekommst du realistisch gesehn nicht hin, wenn man z.B. nur sowas mach
Delphi-Quellcode:
for i := 1 to 2000000000 do
begin

  ... mach was

  if i and $ffff = 0 then
    Application.ProcessMessages;
end;
Denn wer sagt dir, daß ein Rechner für diese 65536 Durchgänge nicht 'ne Stunde braucht
und ein anderer Rechner das nicht schon nach ein paar Millisekunden durch hat.
Ergo kannst du schlecht sagen "noar, das sind grob so um die 5 Mal pro Sekunde".



Zitat:

//machwas
verarbeitet immer nur ein Byte?
wenn nicht,
- dann würde ich lieber < statt <> verwenden
- und bei dem =0 könnte es vorkommen, daß einiges übersprungen wird.



PS:
hier du hast 'ne ProgressBar mit 100 Schritten
if (MStream.Position and $ff) = 0 then
und bei einer 1 MB-Datei (sozusagen 6-stellig) wird diese ProgressBar über 4000 Mal aktualisiert,
das sind 40 Mal mehr, als sie überhaupt anzeigen kann.

if (MStream.Position and $2000) = 0 then
das ist für mich nicht überraschend ... immerhin ist das fast so schlimm wie
if (MStream.Position and $1) = 0 then
nur daß bei Letzterem jeden 2. Durchlauf etwas gemacht wird und bei Ersterem 8192 Mal hintereinander und dann 8192 Mal garnicht und so weiter ... also im Durchschnitt bei jedem 2. Durchlauf.
versuch es mal so
if (MStream.Position and $1fff) = 0 then

Bebe 28. Okt 2009 16:53

Re: Progressbar einbinden
 
Hallo,

wenn es nur um die Aktualisierung der ProgressBar geht, dann wäre auch ein Refresh der Progressbar vorzuziehen als ein Application.ProcessMessages. Ausschließlich würde ich aber das nicht machen, da sonst die Application mehr oder weniger schläft. Ich habe es mal so gelöst, dass ich öfters die Progressbar aktualisiert habe als die Application selber. Das bringt spürbare Verbesserung.

Vielleicht hilft dir das?

Gruß
Matze

isilive 28. Okt 2009 21:44

Re: Progressbar einbinden
 
Zitat:

Zitat von himitsu
if (MStream.Position and $2000) = 0 then
das ist für mich nicht überraschend ... immerhin ist das fast so schlimm wie
if (MStream.Position and $1) = 0 then
nur daß bei Letzterem jeden 2. Durchlauf etwas gemacht wird und bei Ersterem 8192 Mal hintereinander und dann 8192 Mal garnicht und so weiter ... also im Durchschnitt bei jedem 2. Durchlauf.
versuch es mal so
if (MStream.Position and $1fff) = 0 then

Und hier war der Denkfehler :cyclops: Na klar kann $2000 nicht funktionieren. Es war aber auch schon spät, als ich das probiert habe.

$2000 = Bin 0010 0000 0000 0000 = 8192
$1FFF = Bin 0001 1111 1111 1111 = 8191

i AND $1FFF ist erst im 8192'sten Durchlauf gleich Null -> wie gewünscht.

$1FFF oder auch $FFFF funktionieren perfekt.

Das mit dem Aktualisieren werde ich mir anschauen, Matze.

Danke für eure Hilfe. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr.
Seite 2 von 2     12   

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