Frage zur Programmschleife
-
while(msg.message!=WM_QUIT) { if(PeekMessage(&msg,NULL,0U,0U,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else { vRender(); } }Hallo, ich habe Probleme , diese Hauptschleife zu verstehen.
Normalerweise müsste doch , wenn eine Message vorliegt vRender übersprungen werden.
Wenn keine Message vorliegt wird gerendert.Wieso wird dann trotzdem gerendert, auch wenn ich z.B die Maustaste drücke, und somit kontinuierlich eine Nachricht geschickt wird ?
Oder habe ich den Sinn von PeekMessage falsch verstanden ?
-
imson schrieb:
wenn ich z.B die Maustaste drücke, und somit kontinuierlich eine Nachricht geschickt wird ?
Wieso sollte da kontinuierlich eine Nachricht geschickt werden?! Du bekommst eben einmal WM_LBUTTONDOWN und später WM_LBUTTONUP. Gut du bekommst zwischendrin auch WM_MOUSEMOVE (unabhängig, ob du eine Maustaste drückst), aber diese ganzen Nachrichten sind ja ruckzuck abgearbeitet, da ja eigentlich nichts groß gemacht werden muss

-
Hallo, ich dachte immer, da wird in jedem Schleifendurchlauf eine Nachricht gesendet.
Peekmessage prüft doch mit den Parametern 0 und 0, ob irgendwelche Nachrichten vorhanden sind oder ?
-
Hallo, ich dachte immer, da wird in jedem Schleifendurchlauf eine Nachricht gesendet.
Nein, PeekMessage() sieht nach ob in der Messagequeue eine Nachricht vorhanden ist, wenn ja bekommst du die, ansonsten liefert es false zurück und du wanderst in den else-Teil. Eine Nachricht wirst du ganz im Gegenteil eher selten bekommen - vor allem wenn DirectX/OpenGL im Spiel ist.
MfG SideWinder