ich hab ein problem mit dem OnIdle Event.. ich benutze es in meinem Flipbook sobald man Play drückt, also in jedem OnIdle wird einmal gerendert.
Klappt auch gut, nur irgendwie ist es langsamer als wenn ich z.B. bei jedem tastendruck neu rendere.
Wenn ich z.B. in jedem OnKeyDown vom VK_LEFT rendere und die taste gedrückt halte, spielt er schneller ab als via OnIdle... ist das normal?
Gibt's da noch nen tollen anderen trick sowas zu lösen, oder bleibt mir als alternative nur ne while-endlosschleife mit Application.ProcessMessages?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also von einer Endlosschleife mit Application.ProcessMessages halte ich persönlich gar nichts. Auf den ersten Blick mag es sinnvoll zu funktionieren aber eben nicht alles. Man kann zum Beispiel das Fenster mit dem Schließen Button nicht mehr schließen. Und je nach architektur habe ich da schon echt schwerwiegende Probleme gehabt.
Also das OnIdle wird natürlich nur dann aufgerufen wenn deine Anwendung nichts zu tun hat. Ich denke mal done ist auf False? Sobald das auf true steht kommen zwar auch events aber nicht dauerhaft sondern nur sporadisch.
Die richtig harte Methode wäre das Rendern in einen Thread verlagern oder aus aus einem anwerfen (mit synchonize dann).
Falls das auch nichts bringt würde ich evtl mal schauen ob nicht sonst noch wo massiv Zeit verlohren geht bzw ob deine Architektur stimmt. Evtl ist es ja ein unglücklicher Seiteneffekt und er macht ja doch irgendwie das Richtig. Man weiß ja nie.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
OnIdle scheint mir seit meinem Umstieg auf eine Dualcore-CPU als problematisch, und ich hatte damit auf meinem Athlon X2 diverse Timinigprobleme (Treiber und Dualcore-Optimizer installiert), besonders im Fenstermodus wenn die Anwendung den Fokus verlor. Ich selbst nutze nun eine eigene Endlosschleife die nach der Initialisierung gestartet wird und z.B. in Form.OnClose setzte ich dann eine interne Quit-Variable auf True, die diese Endlosschleife beendet. Da ich das auch in anderen veröffentlichten Projekten so gemacht habe und keine Probleme hatte nutze ich das auch in Projekt "W".
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das wird auch bei nicht OpenGL-Programmen so gemacht, wenn ständig aktualisiert werden muss. (Also endlosschleife in nem extra Thread)
Ich denke OnIdle is einfach nur ne recht schicke Methode es ähnlich zu machen. Aber die von Sascha aufgeführten Probleme holt man sich damit wohl auch ins boot. OnIdle erspart einem halt das Schleifen handling. Wobei das ja kein großes ding ist, dass selbst zu regeln.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
also mit OnIdle mit Done:=false hatte ich noch nie Probleme. Wenn die 100% CPU auslastung nicht gewünscht ist, kann in manchen Situationen ein sleep(1) am Ende helfen.
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.