[SOLVED] CPU-Auslastung reduzieren

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

Midimaster

BeitragFr, Jan 28, 2011 9:58
Antworten mit Zitat
Benutzer-Profile anzeigen
TimBo hat Folgendes geschrieben:
Delay ist das übelste , was es gibt !!!



Habt Ihr eigentlich jemals überprüft, was Ihr da behauptet? Ich kanns es manchmal schon gar nicht mehr hören...

DELAY gibt an das Betriebssystem zurück!!!!

Code: [AUSKLAPPEN]
Repeat
   
Forever



Code: [AUSKLAPPEN]
Repeat
   Delay 5
Forever


vergleich doch selbst! Die CPU-Auslastung liegt im oberen Beispiel bei 100% und im unteren bei 13%.

und dann dieser Quatsch:

Zitat:
....Mit Delay erreichst Du niemals eine konstante Framerate.


Hatte jemand von Euch den Eindruck, das in seinem Code-Beispiel eine konstante Framerate benötigt wird? Immer nur Spiele im Kopf, oder? Gerade bei reiner Datenverarbeitung kann es doch sinnvoll sein, das Programm nach getaner Arbeit für x msec in den Schlaf zu schicken. Hier kann ein DELAY sogar flexibler sein als ein TIMER:

Code: [AUSKLAPPEN]

While Not KeyHit(1)
    server_got = RecvUDPMsg(server)
    If server_got <> 0 Then
         ....blabla
    Else
        Delay 16
    Endif
Wend


Während in Euerem Beispiel nur max 60 Anfragen/sec beantwortet werden können. können in diesem Beispiel auch tausende Anfragen pro Sekunde verarbeitet werden. War aber gar nix zu tun legt sich der Server für 1/60 sek schlafen. CPU-Auslastung unter 5%.


Gerade auf Ereignis reagierende Programme können von der DELAY-Variante profitieren. Hätte Mark sie sonst eingebaut?

aMul

Sieger des Minimalist Compo 01/13

BeitragFr, Jan 28, 2011 12:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde Midimaster voll und ganz zustimmen. Delay kann sehr nützlich sein.
Und ich würde auch behaupten, dass ein selbst geschriebener Timer mit Delay genau das gleiche macht wie ein normaler Timer. Mit dem Vorteil, das er meiner Meinung nach flexibler ist. Aber im Normalfall kann man natürlich genauso gut einen Timer benutzten. Ich denke da sollte jeder selbst entscheiden, was er schöner findet.
Ich benutzte beide Möglichkeiten.
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

FireballFlame

BeitragSa, Jan 29, 2011 2:38
Antworten mit Zitat
Benutzer-Profile anzeigen
BladeRunner: Ich hab meine Programme ja nicht nur auf meinem/n System(en) laufen lassen.
An der Sache mit der Mehrarbeit durch die Berechnungen ist was dran, aber dafür lief mein Programm dann auch frameunabhängig, d.h. bei 40 oder 50fps (sollte der Rechner wirklich mal zu langsam sein) bewegte sich im Spiel alles genausoschnell wie bei 60. Ich hab B3D schon lange nicht mehr benutzt, aber iirc war das mit einem Timer, der nur die Anzahl der verpassten Ticks als Ganzzahl zurückgab, nicht möglich.
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Xaron

BeitragSa, Jan 29, 2011 14:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verwende IMMER delay in meinen Spielen:

Code: [AUSKLAPPEN]

loopTimeDelta = MilliSecs() - startLoopTime
;Wir bremsen das Spiel hier auf eine bestimmte FPS Zahl
If( loopTimeDelta < MAX_FRAME_TIME )
  Delay( MAX_FRAME_TIME - loopTimeDelta )
End If


Zusätzlich verwende ich noch die tatsächliche Laufzeit, um Berechnungen vorzunehmen. Gerade diverse Physik-Engines brauchen häufig eine feste FPS. Und auch sonst macht es keinen Sinn, Berechnungen mit 1000 FPS durchzuführen, wenn auch 50 reichen.

Intern macht ein Delay ein Sleep, gibt also die Kontrolle für x Millisekunden and das System zurück.

Wie schon FBF schreibt, ist ein Timer eher die schlechtere Variante.
Cerberus X - Monkey X Reloaded!
 

Compix

BeitragSo, Jan 30, 2011 1:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Tut mir leid das ich mich etwas länger nicht gemeldet habe Wink
Es sollte keine Diskussion in Gang gesetzt werden.
Ich werde jetzt beide "Vorschläge" einfach mal testen und nehme dann das, was weniger Auslastung bei mir und ein paar Freunden zum testen verursacht Wink.

tft

BeitragSo, Jan 30, 2011 9:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

sollche Diskusionen sind aber manchmal nötig. Wie dieser Beitrag zeigt. Denn ein Delay 1 sollte jedes Programm haben das im Fenster Mode läuft. Da wird die FPS meistens sowieso vom Betriebsystem vorgelegt. Wer Fullscreen Games macht kann damit auch die CPU entlasten. Den 1000 FPS braucht ja wohl niemand. Wer Flip 1 verwendet, also auf den Bildschirm Sync wartet muss je nach einstellung in den Grafikkarten Treiber auch ein Delay 1 einfühgen um die CPU Last zu verringern.

Schlussendlich muss jeder selber herausfinden welche der aufgeführten Möglichkeiten bei seinem Programm zum erwünschten Erfolg führt.

Gruss TFT
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!
 

Compix

BeitragSo, Jan 30, 2011 15:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Und das werde ich jetzt dann auch probieren Wink
Dennoch schonmal danke für die vielen Antworten Wink

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group