Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi GetTickCount zögert (https://www.delphipraxis.net/76307-gettickcount-zoegert.html)

Cöster 1. Sep 2006 22:19

Re: GetTickCount zögert
 
Zitat:

Zitat von Daniel B
Also bei mir läuft die TrackBar gleichmässig durch, braucht ca. 4 Sek. dazu.

also auch nicht ganz korrekt, es sollten ja eigentlich 3 Sek sein. :gruebel:

Zitat:

Zitat von Daniel B
Warum es bei manchen nicht gleichmässig läuft, ist mMn das die ProcessMessages gar nicht richtig läuft, feststellen kann man dies, indem man während die TrackBar läuft, es nicht möglich ist das Programm zu beeenden, man kann die Bar dadurch leicht bremsen, die Ereignisreihenfolge/Abarbeitung ist da nicht ganz "zuverlässig".

Und was kann man dagegen tun? Gibt es vll ne Alternative zu Application.ProcessMessages? Hier nochmal der Quellcode des Upgeloadeten Progs:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Start, Y: Integer;
begin
  Start := GetTickCount;
  Y := 200;
  repeat
    Image1.Canvas.Ellipse(0, Y, 50, Y+50);
    Y := Y - 1;
    TrackBar1.Position := GetTickCount-Start;
    Application.ProcessMessages;
  until TrackBar1.Position = TrackBar1.Max;
end;

3_of_8 1. Sep 2006 22:31

Re: GetTickCount zögert
 
Nicht dass ich wüsste - du könntest höchstens die entsprechenden Controls einzeln refreshen.

Noch sauberer geht das ganze natürlich mit Threads - dazu siehe das Tutorial von... ich glaube es war Luckie...

Daniel B 1. Sep 2006 22:35

Re: GetTickCount zögert
 
Hast du bestimmte einstellungen fürs Image und TrackBar? Wenn ich das alles bei mir laufen lasse, ist es in ein paar ms fertig.

SirThornberry 2. Sep 2006 05:24

Re: GetTickCount zögert
 
Zitat:

Zitat von Daniel B
Hast du bestimmte einstellungen fürs Image und TrackBar? Wenn ich das alles bei mir laufen lasse, ist es in ein paar ms fertig.

Dann hast du irgendwas falsch gemacht denn die Schleife hat als Abbruchbedingung das seit Beginn der Schleife 3000 Millisekunden vergangen sind.

Zum Quelltext selbst: Ich finde es etwas ungeeignet abhängig von der Anzahl der Schleifendurchläufe eine bestimmte Anzahl an Elypsen zu zeischnen. In 10 Jahre ist das ganze eventuell so schnell (je nach Rechner) das ein überlauf entsteht. Zudem dürfte die CPU-Auslastung auf 100% stehen während der Ausführung.
Ich fände es sinnvoller wenn Y anahand der verstrischenen Zeit berechnet wird. Zudem macht es keinen Sinn durchweg die Schleife mit voller Last laufen zu lassen. Ich würde da noch ein kurzes Sleep(20) einbauen damit die CPU nicht unnötig auf 100% Leistung hoch geschraubt wird. Zudem könnte mann dann davon ausgehen das unbabhängig von der Geschwindigkeit der CPU die Schleife ungefähr gleich oft durchlaufen wird auf jedem Rechner.

Für die Fortschrittsanzeige ist übrigens auch eine Progessbar besser geeignet als eine Trackbar. Die Trackbar ist eigentlich dafür gedacht das der User den Wert ändern kann was bei deinem beispiel ja aber nicht geht weil du in der Schleife den wert immer korrigierst und im OnChange der Trackbar ja nicht reagierst sondern dort wo du den Wert automatisch setzt.

Cöster 2. Sep 2006 10:18

Re: GetTickCount zögert
 
Zitat:

Zitat von Daniel B
Hast du bestimmte einstellungen fürs Image und TrackBar? Wenn ich das alles bei mir laufen lasse, ist es in ein paar ms fertig.

TrackBar.Max muss 3000 sein.


Zitat:

Zitat von SirThornberry
Zum Quelltext selbst: Ich finde es etwas ungeeignet abhängig von der Anzahl der Schleifendurchläufe eine bestimmte Anzahl an Elypsen zu zeischnen. In 10 Jahre ist das ganze eventuell so schnell (je nach Rechner) das ein überlauf entsteht. Zudem dürfte die CPU-Auslastung auf 100% stehen während der Ausführung. Ich fände es sinnvoller wenn Y anahand der verstrischenen Zeit berechnet wird.

Ist auch nur in diesem kleinen Programm so, weil es mur ja nur darum ging, auf den Fehler aufmerksam zu machen. Hab ich so gemacht, damit der Quelltext möglichst kurz und einfach ist. Bei dem eigentlichen Programm, in dem mir das Problem aufgefallen, handelt es sich um ein Programm zur Simulation von physikalischen Würfen (schräger, senkrechter, waagerechter Wurf etc.). Dabei wird die vorherige Ellipse dann immer wieder gelöscht und die aktuellen Koordinaten werden in Abhängigkeit von der vergangenen Zeit berechnet.

Zitat:

Zitat von SirThornberry
Zudem macht es keinen Sinn durchweg die Schleife mit voller Last laufen zu lassen. Ich würde da noch ein kurzes Sleep(20) einbauen damit die CPU nicht unnötig auf 100% Leistung hoch geschraubt wird. Zudem könnte mann dann davon ausgehen das unbabhängig von der Geschwindigkeit der CPU die Schleife ungefähr gleich oft durchlaufen wird auf jedem Rechner.

Das mit Sleep könnte ich machen. Aber außer der CPU-Auslastung sehe ich kein Problem darin, dass die Schleife auf jedem Rechner unterschiedlich schnell durchlaufen wird. Je öfter sie durchlaufen wird, desto öfter wird das Image aktualisiert. Die Geschwindigkeit, mit der sich die Kugel im Raum bewegt, ist also nicht abhängig von der Rechnergeschwindigkeit.

Zitat:

Zitat von SirThornberry
Für die Fortschrittsanzeige ist übrigens auch eine Progessbar besser geeignet als eine Trackbar. Die Trackbar ist eigentlich dafür gedacht das der User den Wert ändern kann was bei deinem beispiel ja aber nicht geht weil du in der Schleife den wert immer korrigierst und im OnChange der Trackbar ja nicht reagierst sondern dort wo du den Wert automatisch setzt.

Einen TrackBar hab ich verwendet, weil ich das Wurf-Programm später so verbessern will, dass man (wie im MediaPlayer bei Filmen oder Musik) durch verschieben des TrackBars bequem an eine bestimmte Stelle gelangen kann und die Position der Kugel zu diesem Zeitpunkt dann auf dem Image gezeichnet wird.
Ich werde das fertige Programm dann bei Gelegenheit wahrscheinlich auch mal hier vorstellen.


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

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