100% CPU Auslastung
-
Hallo zusammen,
möchte mich mal kurz vorstellen. Ich heiße Christoph und bin 37 Jahre jung;-) und komme aus NRW.
Vielleicht könnte mir Jemand einen Tipp geben...
Mein Prob.:
Habe ein ganz kleines mit Visual c++ 2008 geschrieben, das mir ein
Fenster ausgeben soll. Es sich um ein Spiel handel, das ich schreiben möchte.
Nur wenn ich das Programm aus Visual starte, dann wird zwar das Fenster angezeigt
aber meine CPU-Auslastung liegt bei 100%. Bewege ich das Fenster, dann sing
die Auslastung. Wenn benötigt, dann kann ich den Code auch posten.Vielen Dank schon mal im Voraus!!
Viele Grüße
BillGates
-
Der Fehler ist zwar mehr oder weniger klar: dein Programm macht halt nie Pause.
Ist nur schwer zu erraten was du genau erreichen wolltest wenn wir so gar nix an Code sehen. Und damit dann auch schwer dir zu erklären was du statt dessen machen solltest, und warum.Also ja, Code herzeigen. Und dazuschreiben was das in etwa werden soll, falls es noch nicht erkennbar ist.
-
Vlt. hilft Dir diese Tutorial weiter: http://henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel9.htm
-
Hallo und vielen Dank für eure Antworten!! !!
Klar, Code wäre natürlich besser und hier kommt er nun auch.
Das mit der Pause, finde ich eignetlich logisch...#include <SFML/Graphics.hpp> int main() { sf::RenderWindow window(sf::VideoMode(600, 450), "My first Window!"); sf::CircleShape shapeCir(100.f,50); shapeCir.setPosition( 50.f, 30.f); shapeRec.setPosition( 20.f, 40.f); shapeCir.setFillColor(sf::Color::Red); shapeRec.setFillColor(sf::Color::Blue); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } window.clear(sf::Color::Green);//erzeugt einen grünen Hintergrund window.draw(shapeCir); window.draw(shapeRec); window.display(); } return 0; }
Ich muss dazu sagen, dass das mein erstes Programm in c++ ist. Ich habe aber schon ein paar Kenntnisse in Java.
Vielen Dank!!!!!!!!!! an alle Helfer
Gruß BillGates
Nachtrag:
Ich habe mal das ausprobiert und ich bekomme dann ebenfalls eine 100%-ige
CPU-Auslastung...#include <SFML/Graphics.hpp> int main() { sf::RenderWindow window(sf::VideoMode(400,400), "Mein Fenster"); while(true) { } return 0; }
Klar,es wird nur der Rahmen angezeigt. "while" wird nie gestoppt aber ich verstehe das nicht. Bei Java habe ich keine solche Auslastung, wenn nur ein Fenster angezeigt wird.
Danke!!!!
-
Hallo,
du verwendest ja gar nicht die MFC, bist also hier im falschen Unterforum (besser wäre wohl "Spiele-/Grafikprogrammierung" - evtl. verschiebt es ein Mod.).
Und zu SFML: die 100% CPU-Auslastung (bzw. Kern-Auslastung) sind ja so gewollt, denn bei einem Spiel möchte man ja generell möglichst hohe Framerates haben.
Mittels sf::Window - setFramerateLimit kannst du aber hier eine Obergrenze definieren.PS: Um die Sprache C++ zu lernen, ist aber die Benutzung einer externen GUI-Library (und dann gleich ein Spiele-/Multimediaframework wie SFML) nicht sehr angebracht. Auch wenn es optisch nicht so ansprechend ist, sollte man C++ zuersteinmal mittels einfacher Konsolenprogramme erlernen, um überhaupt die Sprachfeatures und die C++ Standardlibrary (STL, IO etc.) gut genug kennenzulernen (geschweige denn von den Neuerungen seit C++11 und C++14).
-
Danke erstmal für deine Antwort.
Vielleicht verschiebt es ja ein Mod.:-)Hätte nicht gedacht, dass eine 100%-ige Auslastung normal ist...wow!!!!
Werde mal deinen Link austesten, danke!!!Gruß BillGates
PS:@Th69
Hat funktioniert, danke!! Ja, eigentlich sollte man mit Konsolenanwendungen anfangen... Ich wollte mal ein Beispiel aus YouTube ausprobieren. Das schien nicht so schwierig zu sein...aber mit der CPU-Auslastung hatte ich nicht
gerechnet. Danke nochmal!!
-
Ja, eigentlich sollte man mit Konsolenanwendungen anfangen
Beispiele gibt es genug. Kannst ja hier mal schauen: http://henkessoft.de/C++/C++/cpp_konsole.htm
-
Hi,
danke für den Link. Sieht ganz gut aus
Werde mich mal daran halten... Mein Ziel liegt schon weiter als nur Konsolenanwendung zu schreiben. Aber c++ ist ja eine sehr umfangreiche Sprache. Eigentlich komme ich mit Java doch schon besser zurecht, da verzweifelt man, so habe ich das Gefühl, nicht so schnell...aber ich habe ja erst mit c++ angefangenGruß Billgates
-
Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum Spiele-/Grafikprogrammierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
In C++ gibt es keine Funktionalitaet, den Programmablauf an einen anderen Thread abzugeben o.ae. da dies bei jedem Betriebssystem anders funktioniert und C++ auch auf Maschinen ohne die Funktionalitaet benutzt werden kann. Du musst dazu also Funktionen aus z.b. der WinAPI benutzen, konkret da die Messagequeue oder Sachen wie WaitForEvent.
-
Noch ganz kurz meine 2 Cents dazu:
Th69 hat ja schon beschrieben, dass man möglichst hohe Frameraten erziehen möchte. Wie viele Frames kann dein Bildschirm/Fernseher/Whatever aber darstellen? Normale Flachbildschirme und viele Spiele sind auf 60 FPS geeicht (glaub nicht den Schwachsinn, dass der Mensch nur 24 Bilder pro Sekunde sehen kann, man sieht sogar den Unterschied zwischen 30 und 60 FPS und 50 und 60 FPS). 60 FPS wird wahrscheinlich dein Hardwaremaximum sein, aber es gibt auch Monitore, die bis zu 144 FPS darstellen können. Je mehr Frames, desto flüssiger das Spiel/Video/Whatever.
Jetzt ist die Frage: wie hoch soll deine Framerate sein? Sagen wir, du gehst mit dem Maximum, 60 FPS. Eine Sekunde sind 1000 Millisekunden, / 60 sind 16.6 Millisekunden. Sprich, du willst, dass deine Programmierung so ordentlich ist, dass alle Berechnungen für einen Frame in 16 Millisekunden fertig sind. 16 Millisekunden, das hört sich nicht nach viel an, kann es aber schon doch werden.
Sagen wir, du brauchst 5 Millisekunden, um den Frame zu berechnen. Super, dann kannst du den Frame ja schon mal zwischenspeichern lassen und für 11 Millisekunden dem Prozessor sagen, dass er mal anderen Programmen - oder dem Leerlaufprozess - 'ne Chance geben soll. Bei letzterem geht dann deine CPU-Last runter, auf 5/16 ~ 31%. Und plötzlich merkst du, wie viel so eine Millisekunde ausmachen kann.
Das war jetzt stark vereinfacht und geht davon aus, dass deine Berechnungen rein CPU-bound sind, aber das ist im Grunde die Basis, mit der jeder anfängt. Dein Programm muss halt für jeden Frame, den es zeichnen soll, am Ende wieder dem OS die Kontrolle geben, damit die Prozessorlast runtergeht. Das sollte deinem Programm übrigens gar nicht wehtun.