AGB  ·  Datenschutz  ·  Impressum  







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

GetTickCount zögert

Ein Thema von Cöster · begonnen am 1. Sep 2006 · letzter Beitrag vom 2. Sep 2006
Antwort Antwort
Seite 2 von 2     12   
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: GetTickCount zögert

  Alt 1. Sep 2006, 23:19
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.

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;
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: GetTickCount zögert

  Alt 1. Sep 2006, 23:31
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...
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Daniel B
Daniel B

Registriert seit: 27. Okt 2005
Ort: Dachau
453 Beiträge
 
Delphi 2007 Professional
 
#13

Re: GetTickCount zögert

  Alt 1. Sep 2006, 23:35
Hast du bestimmte einstellungen fürs Image und TrackBar? Wenn ich das alles bei mir laufen lasse, ist es in ein paar ms fertig.
Servus...
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#14

Re: GetTickCount zögert

  Alt 2. Sep 2006, 06:24
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: GetTickCount zögert

  Alt 2. Sep 2006, 11:18
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 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 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 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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 21:39 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