You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Friday, January 7th 2011, 12:13pm

100% CPU-Auslastung, 646MB Auslagerungsdatei. Wie am besten senken?

Hallo!
Ich war gestern ganz stolz als ich endlich Pong fertiggestellt habe. Nach 2 Fehlern die ich korrigiert habe, kompilierte ich das Spielchen und mein PC hat sich auf gehangen.
Ich konnte nichts mehr tun. Habe ihn sogar 20min so stehen lassen!!
Jedenfalls: Kann es durch die hohe Auslastung dazu führen, dass das Rendern nicht so ganz klappt wie man will? Ich denk mal schon, denn nichts wird angezeigt obwohl die entsprechende Funktion aufgerufen wird. Habe alle Funktionen die mit Sprites zu tun haben kontrolliert.
Nun habe ich beim programmieren nicht ganz die Auslastung beachtet. - Hat mich auch nichts gelehrt.
Nun ja, wie bekomme ich am besten die Auslastung herunter?
Ich fange jetzt schon an, bei den kleineren Funktionen ein "inline" vor zu setzen.
Könnte mir jemand pauschal Tipps geben wie ich diese starke Auslastung down bekomme?

2

Friday, January 7th 2011, 1:47pm

Benutz Timer, sonst Rendert der mit allem was er kann.
Und nein, es gibt keinen guten Weg darum herum.

3

Friday, January 7th 2011, 2:25pm

Inwiefern? ?(

4

Friday, January 7th 2011, 7:46pm

Nimm nen Timer und stell den auf z.B. 40 Herz, dann feuert der bei SDL (wenn dus richtig machst) 40 mal in der sekunde eine UserEvent ab. Auf das musst du einfach am anfang oder ende deiner Hauptschleife warten und schon is alles ok.
Such halt mal in Google nach SDL Timer

5

Friday, January 7th 2011, 8:00pm

Also nach einer gewissen Zeit jedes mal eine Funktion Aufrufen?
Oder wie ist das gemeint mit den 40HERZ? Da muss man doch Millisekunden angeben. Verstehe ich nicht. :D

6

Friday, January 7th 2011, 9:34pm

ich weigere mich jetzt das zu erklären.
Das steht wunderschön in zich tutorials

7

Friday, January 7th 2011, 9:45pm

Ich weiß nur nicht, in welchem yBezug ich das verwenden sollte und welche Funktionen ich damit ausstatten soll.
In der Hauptschleife die Render Funktionen? Alle Funktionen? Framework? Framework&Render? etc.

8

Friday, January 7th 2011, 10:00pm

http://tinyurl.com/2f2y8el


lesen und glücklich sein, des steht da wirklich wunderschön beschrieben

9

Friday, January 7th 2011, 10:22pm

Da war ich schon. Was ich nicht verstehe ist, was du mit 40Herz meinst. Denn auch auf dieser Seite ist nicht mit der Maßeinheit 40Herz suggeriert wurden.
Was wäre denn jetzt so die universelle perfekte Zeit dafür in ms? Die gleiche wie sie da verwendet wurde.

10

Friday, January 7th 2011, 10:27pm

Nur so am Rande: Wäre es sinnvoll einen Timer in einer while Schleife zu benutzen? Denn genau da werden meine Funktionen ja aufgerufen, im Herz meines Spieles: In einer while-Schleife.
Oder wird übersprungen wenn zeit nicht vorbei?
Gibts echt keinen anderen Weg das alles mal etwas zu drosseln? Ich mein, für PONG ist das ja echt heftig.

11

Friday, January 7th 2011, 11:10pm

das hat mit pong nichts zu tun, wenn du die CPU nicht davon abhälst so schnell wie möglich zu machen hast du eben 100% auslastung
du sagst dem timer einmal was er alle x millisekunden machen soll, und das musst du dann eben in deiner schleie auswerten, dafür gibts userevents bei sdl (das is bei DirectX übrigens viel komplizierter)

12

Friday, January 7th 2011, 11:59pm

Also, ich lese mein Buch über DirectX, mache damit aber noch nichts. Mir erscheint DirectX leichter als viele andere Konstruktionen.
Mag aber auch daran liegen, dass ich schon immer recht sonderbar war.... :rolleyes:
Jedenfalls:
Ich verstehe jetzt nicht ganz was du meinst (mal wieder) :
Was bzw. wozu (<-besseres Fragepronomen) soll ich das auch noch auswerten? Es soll ja lediglich zeit-versetzt starten, wie du es sagst.
Das was er dann verzögert machen soll, wäre dann das Rendern? Oder Teile des Renderns? :wacko:

13

Saturday, January 8th 2011, 12:26am

es soll nicht zeitversetzt starten, es soll lediglich warten bis eine gewisse zeit vergangen ist
warten = nichts tun = wenig CPU auslastung
du brauchst keine 120 FPS, ab ~25 wird es schon flüssig.
also sagen wir mal 50 FPS (Hz) (was sehr viel ist, aber bei nen einfachen pong locker zu erreichen)
dann hat der gigantische 20 millisekunden zeit alles zu berechnen und zu renden.
Nehmen wir mal an, der braucht 5 millisekunden zu brechnen und zu rendern, hat er noch 15 millisekunden zeit sich auszuruhen.

14

Saturday, January 8th 2011, 12:52pm

----- Erstellen gestartet: Projekt: Lernen062, Konfiguration: Debug Win32 ------
Game.cpp
q:\projekte c++\lernen062\lernen062\game.cpp(167): error C3867: "CSprite::Render": Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie "&CSprite::Render", um einen Zeiger auf den Member zu erstellen.
q:\projekte c++\lernen062\lernen062\game.cpp(170): error C3867: "CPlayer::Render": Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie "&CPlayer::Render", um einen Zeiger auf den Member zu erstellen.
q:\projekte c++\lernen062\lernen062\game.cpp(173): error C3867: "CGegner::Render": Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie "&CGegner::Render", um einen Zeiger auf den Member zu erstellen.
q:\projekte c++\lernen062\lernen062\game.cpp(181): error C3867: "CGame::RenderAsteroids": Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie "&CGame::RenderAsteroids", um einen Zeiger auf den Member zu erstellen.
Code wird generiert...
Kompilieren...
Asteroid.cpp
Code wird generiert...
Überspringen... (keine relevanten Änderungen gefunden)
main.cpp
Sprite.cpp
Player.cpp
Gegner.cpp
Framework.cpp
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


Gibt es echt keine andere Möglichkeit? Habe es genau so angewandt wie beschrieben.

15

Saturday, January 8th 2011, 1:33pm

Hört sich an als ob ein & fehlt

16

Saturday, January 8th 2011, 2:15pm

Ich frag mich nur wo.
Die 3 ersten Funktionen starte ich per this-Zeiger.
Die andere ganz normal. Trotzdem sind alle Falsch.
Mal meine Schleife:

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
void CGame::Run ()
{
	SDL_TimerID timer, timer2, timer3, timer4;
	while(m_bGameRun == true)
	{
		ProcessEvents();
 
		g_pFramework->Update();
		g_pFramework->Clear ();
 
		timer = SDL_AddTimer (20, m_pSpriteBackground->Render, NULL);
 
		m_pPlayer->Update();
		timer2 = SDL_AddTimer (20, m_pPlayer->Render, NULL);
 
		m_pGegner->Update();
		timer3 = SDL_AddTimer (20, m_pGegner->Render, NULL);
 
		ProcessMovingG();
 
		SpawnAsteroids();
 
		CheckCollisions();
 
		timer4 = SDL_AddTimer (20, RenderAsteroids, NULL);
 
		CheckWin();
 
		g_pFramework->Flip();
	}
}

17

Saturday, January 8th 2011, 3:05pm

Was zur Hölle machst du da?
erzähl mir nicht du hast das tutorial gelesen =_=

18

Saturday, January 8th 2011, 3:55pm

Doch! Insgesamt 3 mal!

19

Sunday, January 9th 2011, 6:01pm

Wäre schön wenn ich mein Spielchen mal starten könnte....
Wäre denn wer so nett und würde es mir erklären?

20

Sunday, January 9th 2011, 6:44pm

rück mal dein projekt rüber, dann erklär ichs dir direkt am projekt

Social bookmarks