# C++ Programm zu hohe CPU auslastung



## demmy86 (10 Dezember 2008)

Hallo zusammen.

Ich habe hier ein wirklich tolles Programm zur Verwaltung von Musik-Alben.
Das Programm funktioniert auch wunderbar. Das einzige Problem ist die CPU Auslastung ist ständig sehr hoch! Auch wenn ich nichts mache in der Anwendung.
Irgendwas am Quellcode stimmt nicht. Ich weiß leider nicht weiter!
evtl. hat jemand von euch eine Idee warum die CPU-Auslastung immer so hoch ist und wie ich es minimieren kann.
Ich hab euch mal das Hauptprogramm als .txt angehängt.
Bin für jede Idee offen.

Anhang anzeigen main.txt


----------



## Ralle (10 Dezember 2008)

Das Einzige, was mir sofort auffällt, daß da OpenGL initialisiert wird. Ja nachdem, wie das verwendet wird, kann da schon die Last steigen, besonders falls das von der Haupt-CPU erledigt werden muß.

PS:
Ich seh grad, das Ganze Teil, also die Oberfläche etc. basiert auf OpenGL. Na ja ich kann nur sagen, wenn unter Win mit DirectX rumgeproggt habe, dann ging die Systemlast auch immer fleißig nach oben. Die Scene (hier die Oberfläche) wird ja so oder so ständig neu berechnet. Wenn dann die Grafikkarte nicht unterstützt und das emuliert wird (so jedenfalls bei DirektX) dann kann das schon gut sein.


----------



## Rainer Hönle (11 Dezember 2008)

Was passiert in glutMainLoop?


----------



## demmy86 (11 Dezember 2008)

Hi

Danke schon mal! 
also Ralle hast du einen Vorschlag wie man das geschickter Lösen könnte?
Wäre eine in directX programmierte Oberfläche die Lösung?
wegen der glutMainLoop schau ich gleich mal nach.

gruß


----------



## Ralle (11 Dezember 2008)

Eine Frage wäre, ob die eingesetzte Grafikkarte und besonders die Treiber OpenGL, also Hardwarebeschleunigung unterstützen. Denn eigentlich soll ja bei OpenGL, genau wie bei DirektX die Grafikkarte die Rechenintensive Arbeit, wie 3D-Darstellung und Rendern der Oberfläche erledigen. Aber mit OpenGL hab ich mich bisher nur am Rande befaßt, um es mal unter Win mit Delphi zu testen. Was ich hier kundtue ist also mehr Halbwissen. 

Wenn meine Vermutung stimmt, gibt es 2, vielleicht 3 Möglichkeiten.

1. Schnelle Grafikkarte mit Hardwarebeschleunigung und den richtigen Treiber.
2. Die Oberfläche von unnötigem 3D-Kram etc. befreien.

3. Das Rendern der 3D-Oberfläche läuft ja in einer Endlos-Schleife ab (glutMainLoop????) Wenn man in dieser Schleife vielleicht eine Wartezeit einbaut, wird die Oberfläche evtl. nicht mehr so schnell aktualisiert, aber die Last der CPU könnte dadurch sinken.

Du könntest testweise bestimmte Dinge aus der Oberfläche auskommentieren und mal testen, ob die Last sinkt. Kann aber auch sein, daß das Rendern dann mehr Frames/Sekunde bringt, die Last aber bleibt. 
Evtl. gibt es Einstellungen für OpenGL, welche den Anteil des Prozesses an der CPU-Rechenzeit einschränken?


----------



## vierlagig (11 Dezember 2008)

Ralle schrieb:


> 2. Die Oberfläche von unnötigem 3D-Kram etc. befreien.



ist die schönste lösung!


----------



## Ralle (11 Dezember 2008)

vierlagig schrieb:


> ist die schönste lösung!



Das Problem ist, das die gesamte Oberfläche auf OpenGL beruht. :-(
Probieren würde ich das aber ganz sicher mal.


----------



## Rainer Hönle (11 Dezember 2008)

Ich glaube nicht, dass der Grafik-Schnick-Schnack die eigentliche Ursache der hohen CPU-Last ist. Die  heutigen Rechner müssen das abkönnen, egal ob mit oder ohne Beschleuniger-Grafikkarte. Erhöhte Last ja, aber nicht sehr hohe Last (was bedeutet dies eigentlich in Prozent? Wo liegt die hohe Last?) Ich tippe eher auf den Programmteil, der noch nicht eingestellt ist.


----------



## Ralle (11 Dezember 2008)

@rainer
Yep da kannste Recht haben, aber wer weiß, was demmy86 da als Linuxmöhre "mißbraucht", bei mir waren das meißt irgendwelche ausgemusterten Gurken.


----------



## demmy86 (11 Dezember 2008)

meine Linux möhre is ein 1,2GHz Rechner mit ner VIA/S3G UniChrome Pro II IGP Grafikkarte! 
Die Grafikkarte läuft mit DirektX ich schau grad ma ob sie auch OpenGL ab kann!
Also nix besonderes lol
Also wie gesagt er läd die Oberfläche und ich kann alles im Programm machen nur eben etwas langsamer da die CPU immer zu 100% ausgelastet ist! 
Und es läuft Windows XP Home.
die anderen teile stell ich gleich mal ein!


----------



## demmy86 (11 Dezember 2008)

So hier erst mal die weiteren Programmteile.

Anhang anzeigen INIreader.txt

Anhang anzeigen Albumsloader.txt


----------



## Ralle (11 Dezember 2008)

demmy86 schrieb:


> Und es läuft Windows XP Home.
> die anderen teile stell ich gleich mal ein!



Lol, irgendwie ist da im Code ein "ifdef Linux", da bin ich wohl einfach mal auf Linux hängengeblieben. Aber anyway, das tut ja nix.

Womit Compilierst du das?


----------



## Ralle (11 Dezember 2008)

Rainer Hönle schrieb:


> Was passiert in glutMainLoop?



Das wird die "Endlos-Schleife" vonOpenGL sein.



> // OpenGL
> #include <GL/freeglut.h>


----------



## demmy86 (11 Dezember 2008)

Hi also ich hab grad mal ein paar Tests bezüglich directx und OpenGl gemacht.
Und ich hab eine deutliche Veränderung der CPU-Geschwindigkeit festgestellt.
Ich sags mal so, die anderen Punkte die ihr genannt habt wie unnötige 3D Teile entfernen sollten auf jenden fall zusätzlich gemacht werden aber ich denke zu 90% liegt es an OpenGL.

Die Grafikkarte kann mit OpenGL einfach nix anfangen. Somit darf die CPU alles machen!


----------



## Ralle (11 Dezember 2008)

Übrigens, Herzlichen Glückwunsch, ab heute bist du "Erfahrener Benutzer", mit deinem 100-sten Beitrag.


----------



## demmy86 (11 Dezember 2008)

Ja 
danke! lol


----------



## demmy86 (13 Dezember 2008)

Ich bin da eben auf etwas gestoßen! und zwar hab ich ein Tool entdeckt, welches OpenGl in directX umwandelt. Ein Universaltreiber quasi!
Das Tool nennt sich "Gldirect 5.02". Kennt das einer von euch?
bzw. was haltet ihr davon?
Ich hab es mal getestet, also die Cpuauslastung is deutlich nach unten gegangen. Das Programm läuft deutlich schneller usw.
Eigentlich is alles ok mir is nur ein gleiner Bug aufgefallen. Und zwar kann ich nicht mehr mit der Maus in OpenGL erzeugte Grafiken anklicken um eine Aktion aus zu führen. Was das ding eigentlich schonwieder uninteressant macht. Oder liegt das evtl. auch an der Programmierung des C++ programms?


----------

