Frage zu 100% CPU Auslastung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Frusciante

Betreff: Frage zu 100% CPU Auslastung

BeitragFr, März 14, 2008 13:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, hat die CPU Auslastung etwas mit der Frameunabhängigkeit zu tun? Ich programmiere Framunabhängig (Allerdings nicht mit einer Bremse oder Waittimer, sondern so wie es im Tutorial Bereich beschrieben wird!) habe aber dennoch immer 100% CPU Auslastung. Soweit ich das sehen kann verschwende ich keine Resourcen. Wenn ich keine Aktion ausführe, wird nur die Spielfigur gezeichnet. Liegt das daran das der Computer versucht die schleifen so schnell wie nur möglich durchlaufen zu lassen? Kann ich dass einschränken ohne Waittimer, denn wenn ich zusätzlich zur Frameunabhängigkeit noch einen waittimer einbaue, ruckeln die Bewegungen.

mfg Frusciante

Eingeproggt

BeitragFr, März 14, 2008 13:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Im Tutorialbereich beschrieben? Da steht doch genau drinnen, wie man 100% vermeidet (und vor allem warum mans vermeiden sollte) -> https://www.blitzforum.de/foru...hp?t=25242

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

Frusciante

BeitragFr, März 14, 2008 13:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Frameunabhängig wie im Tutorialbereich beschrieben! Das Tut über 100% habe ich mir auch schon durchgelesen, allerdings geht es dort ja um grobe Fehler und solche kann ich in meinem Programm nicht finden (ist jetzt auch etwas zu lang um es einfach mal zu posten). Ich habe BB3D und da gibt es ja noch kein Waitevent. Somit habe ich selbst wenn nur die Spielfigur gezeichnet wird 100% Auslastung.

Markus2

BeitragFr, März 14, 2008 13:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Delay ms
und Command Reference/Timer ansehen Smile

The_Nici

BeitragFr, März 14, 2008 17:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Markus2 hat Folgendes geschrieben:
Delay ms


Noch etwas Print und Input dazu oder war das alles? Oh stimmt, Goto zum Nachtisch vergessen. =)

Genau in Eingeproggts Link steht, dass man Delay vermeiden soll.

DerHase

BeitragFr, März 14, 2008 18:20
Antworten mit Zitat
Benutzer-Profile anzeigen
The_Nici hat Folgendes geschrieben:
Markus2 hat Folgendes geschrieben:
Delay ms


Noch etwas Print und Input dazu oder war das alles? Oh stimmt, Goto zum Nachtisch vergessen. =)

Genau in Eingeproggts Link steht, dass man Delay vermeiden soll.


Nici erklär das mal bitte in eigenen Worten warum man Delay nicht nehmen soll.

Ich mache es so ähnlich wie wie StepTiger mit Delay, er hat im Codearchiv diesen Thread dazu geschrieben. Funktioniert auch in 2d seine Methode Wink

Edit: Natürlich könnte man in der Zeit in der Delay das Programm anhält auch andere sachen berechnen, aber für den Hausgebrauch sollte es so reichen imho Wink
Play Satyr!

Markus2

BeitragFr, März 14, 2008 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Sinn hinter Delay ist das Windows Zeit bekommt was zu tun und
dein Programm nicht in dieser Zeit sinnlose Sachen macht .

Sinnlos ist z.B. 500 mal in der Sekunde neu das Bild aufzubauen statt
z.B. in 60 Hz wie der Bildschirm .

Delay sollte eigentlich gleich der API Funk. Sleep sein .

Diese Delay Zeit muß man sich ausrechnen .

Waittimer heißt nicht das dein Programm wartet bis ne Zeit x rum ist
sondern wenn deine Schleife zu schnell ist wird gewartet bis die
Timer Zeit ereicht ist , also ähnlich wie Delay .

Wenn das Spiel nicht flüssig läuft kann es auch an blöden NVidia Treibern
liegen oder an Diensten/Treibern die alles aus dem Rythmus bringen .

The_Nici

BeitragFr, März 14, 2008 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Waittimer passt sich von Computer zu Computer an, Delay ist einfach fest.
Bei WaitTimer wartet man auf die Frames, udn bei Delay sagt man einfach "Warte so lange!"

Btw. die Diskussion gabs schonmal, erst vor ner Woche oder so.

Markus2

BeitragFr, März 14, 2008 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Delay ist nicht fest , dafür hat es ja den Parameter .
Beide Befehle machen genau das was sie sollen und
das die sich von Computer zu Computer anpassen ist irrelevant finde ich .

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, März 14, 2008 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Man kann natürlich auch die volle Ladung sowohl
- Timer (auf Bildschirmfrequenz)
- Delay (fest auf 5 oder weniger)
- Frameunabhängiges programmieren
anweden.

Dann würde man immer etwas Zeit dem System für andere Dinge lassen (Delay), die maximale Bildaufbaufrequenz nicht überschreiten (Timer) und bei langsamen Rechnern würde dann auch das frameunabhängige programmieren greifen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

FireballFlame

BeitragFr, März 14, 2008 23:45
Antworten mit Zitat
Benutzer-Profile anzeigen
The_Nici hat Folgendes geschrieben:
Waittimer passt sich von Computer zu Computer an, Delay ist einfach fest.
Bei WaitTimer wartet man auf die Frames, udn bei Delay sagt man einfach "Warte so lange!"

Lustig, in Wirklichkeit ist es andersrum:
Delay kann ich anpassen und jedesmal genausolange warten wie ich will, um Framerate und Verbrauch auszubalancieren.
WaitTimer hingegen arbeitet immer mit der selben Framerate und das dümmste ist, dass ein Programm, wenn es die eingestellten z.B. 60fps nicht ganz schafft, nicht etwa mit 50fps laufen kann, sondern nurnoch mit 30, weils ja wieder auf den nächsten Tick warten muss... es sei denn, man wertet den zurückgegebenen Wert aus, aber frameunabhängig wirds davon trotzdem nicht...
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

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, März 15, 2008 0:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit 30FPS ist übrigens falsch. WaitTimer ist dafür schlau genug programmiert worden (Mark ist doch kein Idiot). Wink

Code: [AUSKLAPPEN]
Graphics 400,400,0,2
SetBuffer BackBuffer()

timer=CreateTimer(50)
wait=16



While Not KeyHit(1)
   
   If KeyDown(203) Then wait=wait-1:If wait<0 Then wait=0
   If KeyDown(205) Then wait=wait+1
   
   Delay wait
   
   
   Text 20,20,fps+" FPS"
   Text 20,40,wait+" Wait"
   
   
   msc=MilliSecs()
   
   If msc>mts Then
      mts=msc+501
      fps=frm*2:frm=0
   Else
      frm=frm+1
   End If
   
   WaitTimer(timer)
   Flip 0
   Cls
Wend
End


Die Aussage von The_Nici halte ich übrigens für richtig. Was der Programmierer dann aus Delay macht, ist eine Sache, aber Delay ist von sich aus ''fest''.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

BladeRunner

Moderator

BeitragSa, März 15, 2008 13:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
das die sich von Computer zu Computer anpassen ist irrelevant finde ich .

Ist es nicht, denn wenn Du ein eh schon langsames System noch dazu mit einem festen Delaywert ausbremst ist das schlicht und ergreifend Mist.
Hier ist der Timer deutlich im Vorteil, denn wenn das System in Verzug gerät wartet er eben nicht mehr.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

FireballFlame

BeitragSa, März 15, 2008 19:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun gut, aber ich habe nie wirklich viel von WaitTimer gehalten, sondern mir immer mit Delay und Millisecs einen Ersatz programmiert. Zum einen halt wegen der Frameunabhängigkeit, wenns mal langsamer läuft, zum anderen aber auch, weil sich dann Zeitlupen- und -raffereffekte sehr einfach realisieren lassen Razz
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

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, März 15, 2008 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Frameunabhängigkeit hat aber nichts mit einer Framebegrenzung gemeinsam, ausser das das Wort ''Frame'' in beiden vor kommt. Frameunabhängig musst du in beiden Fällen extra programmieren, und dann ist es auch in beiden Fällen einfach eine Zeitlupenfunktion einzubauen. Mit Delay hätte man eventuell nur den Vorteil, dass man aufgrund einer speziellen Formel es so gestallten könnte, dass der Verlauf zwischen ''Das System abbremsen zu müssen'' und ''Das Spielgeschehen mit erhöhtem Deltawert zu beschleunigen'' weicher gemacht werden kann. Ich bezweifle aber, dass es jemand so in der Form gemacht hat, das der Aufwand im Verhältnis zum Nutzen doch sehr groß ist.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Markus2

BeitragSo, März 16, 2008 11:55
Antworten mit Zitat
Benutzer-Profile anzeigen
@BladeRunner
ich sprach von berechneten Delay Werten ?
Wenn man eine Hauptschleifen Zeit vor gibt
hat man was übrig am Ende oder nicht .
Und Delay 0 tut nem altem langsamen System nicht weh .

BladeRunner

Moderator

BeitragSo, März 16, 2008 13:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann hab ich deine Formulierung missverstanden, denn was ich von dir Zitierte hört sich so an als wolltest du ein festes delay nehmen. Aber warum soll ich mir das delay mühsam errechnen wenn waittimer dies automatisch für mich macht ?
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Markus2

BeitragMo, März 17, 2008 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
@BladeRunner
ja, haste missverstanden ,
war auch nur ne Bermerkung zu einer Antwort .
Wenn jemand nicht waittimer benutzen möchte dann mußte
wohl bei Delay die Zeit ausrechnen .
Gab oben bedenken zu waittimer aber das wurde schon geklärt .

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group