![]() |
AW: Programm verbraucht zuviel Prozessorleistung - Wie kann ich Lag verhindern?
Wieso? Weil nach dieser Idee das Programm sich der Auslastung anpasst?
Betrachten wir die Natur. Was passiert wenn der Mensch nicht genug Nahrung bekommt? Ok, er nimmt ab, aber was passiert vorher? Der Körper stellt sich drauf ein (liest man oft) und nutzt die vorhandene Nahrung effizienter aus. Hört sich hoch interessanter an, fast so, als ob der Körper aus 1 Joule 2 machen könnte. Geht natürlich nicht, aber wie geht sonst? Ganz einfach, der Körper wird träge. So verbrennt er weniger Kalorien. Der Körper passt sich den Gegebenheiten an, also durch die Brust ins Auge? |
AW: Programm verbraucht zuviel Prozessorleistung - Wie kann ich Lag verhindern?
Ich verstehe es aber auch noch nicht so ganz.
Ich kenne es eigentlich auch entweder nur so, dass es einfach langsamer wird wenn die Frames nicht mehr schnell genug berechnet werden können (eher ungewöhnlich, kommt aber durchaus vor) - Oder Dinge wie Benutzereingaben, Physik, Wegfindung usw laufen vom Grafikrendering getrennt. Wenn ein Bild nun 60, 70 ms dauert, meinetwegen. Aber deswegen kann bsp. die Netzwerkkommunikation oder KI doch nicht immer auf die Grafik warten. Was aber natürlich vorkommt (leider zu selten) ist eine Anpassung des Detailgrads wie verschiede LOD-Stufen, Sichtweite oder auch gröber arbeitende KI wenn die FPS in den Keller gehen. Wäre es, im konkreten Spaceshooter-Beispiel in Delphi denn tragbar, das Bitmap-Pinseln in einen Thread auszulagern während der VCL-Hauptthread sich 60 mal in der Sekunde das zuletzt gerenderte Bitmap anschaut und evtl auf das Formular pinselt? Oder vielleicht auch nur für tolle Grafikeffekte - Explosions-Sprites müssen ja nicht mit der gleichen Geschwindigkeit animiert und über das fertige Bild gelegt werden wie die fliegenden Raumschiffe und der Spieler... |
AW: Programm verbraucht zuviel Prozessorleistung - Wie kann ich Lag verhindern?
Liste der Anhänge anzeigen (Anzahl: 1)
Das war nur ein Ansatz, nicht die Lösung. Kann jeder machen wie er will.
Und für die Bastler - wer Lust hat kann diesen "Bildschirmschoner" optimieren. Er ist zu langsam ;) |
AW: Programm verbraucht zuviel Prozessorleistung - Wie kann ich Lag verhindern?
Liste der Anhänge anzeigen (Anzahl: 2)
Timer.Interval:=16;
const speed = 72; Ergebnis im Anhang. Im 2.Anhang: const speed = 100; MIN (mein Wert:27) und MAX (mein Wert:142) hinzugefügt, Caption verbessert. |
AW: Programm verbraucht zuviel Prozessorleistung - Wie kann ich Lag verhindern?
Liste der Anhänge anzeigen (Anzahl: 1)
Meine Augen :roteyes:
Das jetzt noch zweifach im Anagylph-Verfahren rendern für den 3D-Effekt und wer dann am längsten ohne epileptischen Anfall bleibt hat gewonnen :smile2: |
AW: Programm verbraucht zuviel Prozessorleistung - Wie kann ich Lag verhindern?
Ich würde nicht davon ausgehen, daß ein TTimer genau läuft.
Diese Messages sind quasi niedrig Priorisiert. Ist das Programm/System ausgelastet, dann sind die Timer es, welche praktisch als erstes keine Messages mehr rausgeben. Außerdem werden sie nur via PostMessage in die MessageQueue eingereiht, als selbst wenn sie pünktlich rausgehen, werden sie nicht sofort abgearbeitet. Dauert die Abarbeitung länger, dann werden neue Messages nicht rausgegeben, solange noch Eine in der Queue steckt, was dann für fehlende Zeit sorgt, wenn man die Spielgeschwindigkeit an den Takt der Messages hängt. Und auf langsameren rechnern, welche die einzelnen Messages nicht schnellgenug verarbeiten, wird es dann, wie schon mitbekommen, auch noch langsamer. Wenn man den zeitlichen Ablauf wirklich an einen zeit-synchronen Zähler (Uhrzeit oder Counter ala GetTickCount oder schnellerere MultiMediaTimer) hängt und die Wegstrecke nicht von der Verarbeitungsgeschwindigkeit, sondern von der Uhrzeit abhängig macht, dann ist es egal, ob der Rechner 500 oder nur 2 FPS schafft ... die Wegstrecke ist dann praktisch gleich. (vorausgesetzt die Wegstrecke ist entsprechend vorhersehbar, bzw. nachberechenbar) So könnte man dann über Pausen zwischen den Verarbeitungen auch die CPU-Auslastung steuern, bzw. die überlastete CPU regelt das von selber runter, ohne daß es in einer Zeitlupe endet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:06 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-2025 by Thomas Breitkreuz