Alternative zu CWinApp::OnIdle() für 100% Leistung
-
Hallo allerseits,
ich lerne gerade Direct3D. Als Rahmen-Programm wird in den Büchern und Tut's meistens ein WinAPI-Skelett vorgegeben. Ich nehme lieber MFC, weil ich es schöner finde und weil es damit leichter ist, z.B. schnell mal einen Dialog einzuhängen um z.B. Device-Parameter interaktiv einzustellen.
In den WinAPI-Samples sieht es meistens so aus, dass die Message-Loop "getuned" wird, indem etwa GetMessage() durch PeekMessage() ersetzt wird, um möglichst viel Rechenzeit abzukriegen.
Meine ersten Experimente mache ich, indem ich das Rendern in CWinApp::OnIdle() vornehme. Damit nutze ich aber im Prinzip nur die Zeit, die sonst so "übrig bleibt" --> Ruckeln. Gibt es ne Möglichkeit, bei MFC die Message-Loop ähnlich w.o. auf spieletauglich zu tunen, und wenn ja wie?
Danke schonmal für Ideen und Ansatzpunkte!
-
hi, ich habe mir einfach einen timer mit 10 ms gemacht <- bringt (theoretisch)
100 fps, was meiner meinung nach locker reicht.
mein kleines spiel (ist zwar mit c# gecodet) hat eine prozessorleistung von max. 2 %. ruckeln tuts nicht.
-
Danke nonamebody,
allerdings reicht mir die Timer-Lösung nicht. Der Windows-Timer kickt meines Wissens nicht zuverlässig immer alle 10ms, wenn man 10ms angibt. Ich entsinne mich in MSDN zum Timer auch was gelesen zu haben bzgl. der Timer-Auflösung und dass sie nicht für kritische Anwendungen geeignet ist.
Ob es für eine Anwendung reicht, liegt aus meiner Sicht vor allem an dem, was man in der Timerbehandlung alles rechnet. Bei deiner Anwendung scheint es hinzuhauen.Trotzdem: weiss jemand, wie man mit MFC möglichst nahe an 100% CPU-Leistung rankommt? Mein nächster Ansatz ist das Überladen von CWinApp::Run(). Anscheinend befindet sich da die Message Loop. Kann mir jemand sagen, wie ich das am besten anstelle?