C++ Programm zu hohe CPU auslastung

demmy86

Level-2
Beiträge
202
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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.
 
Zuletzt bearbeitet:
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ß
 
Zuletzt bearbeitet:
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?
 
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@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. :cool:
 
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!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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?
 
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!
 
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?
 
Zurück
Oben