Peekmessageschleife 100% CPU Lastung => geringes Ruckeln
-
Hallo!
Mit meiner Peekschleife habe ich eine CPU Auslastung von 100%...ich denke darauf ist das seltene geringe Ruckeln in meinem Spiel zurückzuführen...ist ziemlich nervig...gibt es da keine bessere Schleife als eine, die gleich das halbe System lahmlegen will? Mein Code sieht bisher so aus:while( msg.message != WM_QUIT && msg.message != WM_DESTROY ) { // Meldungen holen if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) ) { // TastenSchlüssel gegebenenfalls übersetzen TranslateMessage( &msg ); // An MsgProc() weiterleiten DispatchMessage( &msg ); } else { } }
Wäre nett wenn jemand einen Tipp hätte,
Gruß,
Kevin
-
denke nicht das dein spiel deswegen ruckelt. Denn die Auslastung kommt ja daher, das in der Schleife keine Pausen drinnen sind (normalerweise vsync oder ein sleep(50)). Wenn du meinst kannst du ja einen separaten Thread für Messages einrichten, nur das wird an der Auslastung nichts ändern, da du ja weiter eine bis ans limit laufende Schleife hast.
-
ach manno...woher kann denn das Ruckeln sonst kommen? Hab echt keine Ahnung...versaut das ganze Spiel!! Ganze Arbeit umsonst?
Kevin
-
lass mal nen profiler drüber, dann siehst du wo es zwickt
[edit] bzw kann es sein, das du GDI zum zeichnen benutzt?[edit]
-
nene nur Direct3D Funktionen..wo kriegt man so nen Profiler her und was gibt der aus?
-
Er misst, wieviel Laufzeit in welchen Funktionen des Programms verbracht wird. Damit kann man Flaschenhälse finden. Wenn du keinen hast, schau dich bei google oder sourceforge um. Oft kommen sie in Verbindung mit einem debugger. zB Valgrind, der soll sehr gut sein, leider Linux only.
-
Hat MSVS sowas nicht?
-
GlowCode ist ein ziemlich guter Profiler. Ausserdem sagt dir das Programm, ob und wo memory leaks entstehen und noch einiges mehr...
-
Definiere mal "Ruckeln" genauer. Hat es überhaupt was mit der Framerate zu tun?
Bye, TGGC \-/
-
mhh etwas komisch zu beschreiben..es ist nicht das typische Ruckeln, welches man kennt....es ist häufig so, dass wenn ich die Maus ganz schnell bewege und während dessen noch immer wieder in irgendwelche Richtungen drücken, ich mich für eine Zeit in die Richtung bewege, das Programm aber irgendwie gelähmt ist und nicht mehr die Mausaktionen beachtet...manchmal sieht es aber auch nach dem typischen Ruckeln aus, aber wahrscheinlich nur weil es in kürzeren Abständen ist...
Gruß,
Kevin
-
Hi,
bei meinem Spiel gibt es auch eine cpu Auslastung von 100%, aber es ruckelt nicht. Die Auslastung ist normal, würd ich sagen.
mfg juli
-
jube schrieb:
bei meinem Spiel gibt es auch eine cpu Auslastung von 100%, aber es ruckelt nicht. Die Auslastung ist normal, würd ich sagen.
Kann man so pauschal nicht sagen. rapso hat seiner Engine ja auch beigebracht, nur geringe CPU Auslastung zu erzeugen.
-> Benutzt Du denn auch DirectInput oder etwa MouseMessages?!?
-
Sgt. Nukem schrieb:
jube schrieb:
bei meinem Spiel gibt es auch eine cpu Auslastung von 100%, aber es ruckelt nicht. Die Auslastung ist normal, würd ich sagen.
Kann man so pauschal nicht sagen. rapso hat seiner Engine ja auch beigebracht, nur geringe CPU Auslastung zu erzeugen.
eher dem editor und nur weil ich das timer event nutze, die meißte zeit wartet man ja eh auf die graka. Im framework ist natürlich 100% auslastung auch wenn's nicht viel bringt.
rapso->greetS();
-
Surkevin schrieb:
mhh etwas komisch zu beschreiben..es ist nicht das typische Ruckeln, welches man kennt....es ist häufig so, dass wenn ich die Maus ganz schnell bewege und während dessen noch immer wieder in irgendwelche Richtungen drücken, ich mich für eine Zeit in die Richtung bewege, das Programm aber irgendwie gelähmt ist und nicht mehr die Mausaktionen beachtet...manchmal sieht es aber auch nach dem typischen Ruckeln aus, aber wahrscheinlich nur weil es in kürzeren Abständen ist...
Gruß,
KevinHi
ich kenne sowas zu genüge. Auf manchen System sind die Verzögerungen sogar im Sekundenbereich obwohl das Programm selbst flüssig läuft.
Ich vermute dass es darin liegt, dass der Messagehandler von dem Programm viel zu sehr gebremst wird. Manchmal hilft es, ab und zu ein Sleep(50) aufzurufen oder ähnliches. Aber die besten Erfahrungen habe ich mit DInput gemacht, dann hatte ich nie wieder solche Probleme.Viele Grüße
Fischi
-
schreib einfach
PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE );
TranslateMessage( &msg );
DispatchMessage( &msg );also ohne das if/else, weil sonst nicht gezeichnet wird, wenn eine message vorhanden ist ...
-
Surkevin schrieb:
Hat MSVS sowas nicht?
Doch, hat auch einen. Zumindest Version 6.0. Unter Build->Profile. Musst aber vorher die Projektoptionen so setzen, dass profiling aktiviert ist (project settings - link - enable profiling).
Jaja, mit dem Ruckeln ists so ne Sache
Wie siehts denn aus? Wie ist die Framerate?