Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 11, 2025 03:06

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Alternative zu OnIdle
BeitragVerfasst: Mi Mär 14, 2007 12:11 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

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?

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 14, 2007 12:21 
Offline
DGL Member
Benutzeravatar

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. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 14, 2007 13:03 
Offline
DGL Member
Benutzeravatar

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".

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 14, 2007 15:33 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 14, 2007 17:58 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
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.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]