Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Mein Spiel -> CPU Auslastung 100% (https://www.delphipraxis.net/53206-mein-spiel-cpu-auslastung-100-a.html)

Neutral General 12. Sep 2005 12:43

Re: Mein Spiel -> CPU Auslastung 100%
 
Wie schon geschrieben es klappt :D
Hätt ich echt nicht gedacht... danke :thumb:

Mr_T 14. Sep 2005 16:00

Re: Mein Spiel -> CPU Auslastung 100%
 
Also das mit dem Timer ist nun echt keine Lösung ^^
Denn: der Timer an sich auf einer 1er Einstellung reduziert die Maximale FPS-Zahl auf 1000 ... da kaum ein Spiel so schnell läuft bedeutet also die Timer-Einstellung von 1: Rendere so schnell du halt kannst - Wahrscheinlich die vernümpftigste Lösung und mit dme OnIdle-Event von Delphi nahezu gleichzusetzen - dieses brasucht auch immer 100% CPU-Power, weil halt so viel und so schnell gerendert wird, wie es halt gerade geht.
Das Sleep(10) bewirkt nun aber, dass nach jedme Rendern erstmal 10 Millisekunden Pause gemacht werden, bevor deine Anwendung weiterarbeitet ... eher friert sie für die Zeit ein udn der Prozie arbeitet solange an anderen Prozessen, deshlab hat er nicht 100% Last .... Aber: damit reduziert man die Maximale FPS-Zahl auf 100 (bei der Idealen Hardware, die keien Zeit zum Rendern bräuchte) ... auf langsamen Maschienen hingegen wird dieses zum Overkill ... man stelle sich das Szenario vor, das die Application mit ca 20 Frames pro Sekunde läuft ... in der Regel noch so eben akzeptabel. Nun aber bewirkt man mit dem Sleep(10), das statt 50 Ms 60 gebraucht werden für einen Frame, also die FPS-Zahl auf ca 18 sinkt ... mag nicht viel klingen, ist aber ärgerlich ^^
Also: Leute, lasst doch eure Anwendungen so schnell Rendern wie sie wollen ... und wenn ihr noch nebenher was machen wollt, denn nehmt keinen Timer oder ähnlichen Spielkram, sondern das OnIdle-Event, da immer denn nur was machen soll, wenn alle anderen Prozesse nichts zu tun haben ...

DGL-luke 14. Sep 2005 16:14

Re: Mein Spiel -> CPU Auslastung 100%
 
@Mr_T: Du hast vollkommen recht, ein sleep(10) ist absolut suboptimal - trotzdem wird ein OnIdle mit Done:=false immer 100% Prozessorlast zur folge haben.

Somit also zwei Möglichkeiten: Done:=true - es wird erst wieder gerendert, wenn sich irgendwas verändert hat. Das ist gut, wenn im Render-ereignis absolut keine Berechnungen(timebased movement etc.) vorkommen. Wenn diese also alle ausserhalb passieren, hat man die ideale frame rate und theoretisch dürfte es nicht ruckeln. Für ein kleines 3d-fenster z.B. in einem Tool sollte das reichen.

oder

Die Lösung mit dem Timer. Damit(TTimer.Interval) kann man effektiv die maximale Framerate festlegen.

Für ein Hochleistungs-3d-Spiel wird aber so gut wie immer die einfache OnIdle-mit-done:=false-lösung die einfachste und richtigste bleiben. Wiederum anders sieht es bei Laptops aus - hier sollte man immer zumindest per config-datei eine möglichkeit zur begrenzung anbieten.

:-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:10 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