Hi!
Wollte ein kleines qt basierendes spiel programmieren. Mein Problem ist dass jedes Spiel einen eigenen game loop hat, qt aber seinen eigenen event loop.
Mein game loop würde in etwas so aussehen
while(true) {
Modelle bewegen
Kollision berechnen
usw..
}
Da ich qglwidget benutzte benötige ich den qt event loop auch.
Es wäre natürlich möglich den game loop in einem eigenen Thread laufen zu lassen. Dieses bringt aber einige Probleme mit sich und daher keine vernünfige alternative.
Gibt es eine Möglichekeit die qt events irgendwie in dem gameloop abzuarbeiten?
Oder einen eigenen qt event loop zu schreiben in dem ich dann meine Tasks integrieren kann?
QEvent Loop
Re: QEvent Loop
Dann solltest Du dich der Probleme annehmen.Superheftig hat geschrieben:Dieses bringt aber einige Probleme mit sich und daher keine vernünfige alternative.
processEvents, aber das ist keine vernünftige AlternativeSuperheftig hat geschrieben:Gibt es eine Möglichekeit die qt events irgendwie in dem gameloop abzuarbeiten?
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
-
Superheftig
- Beiträge: 63
- Registriert: 6. September 2008 15:20
-
Superheftig
- Beiträge: 63
- Registriert: 6. September 2008 15:20
-
Superheftig
- Beiträge: 63
- Registriert: 6. September 2008 15:20
-
Superheftig
- Beiträge: 63
- Registriert: 6. September 2008 15:20
Hab doch noch ne möglichkeit gefunden!
Ich benutzt nur einen Thread. Before ich das exec() von der QApplication ausführe starte ich einen QTimer mit msecs = 1. Das timeout() signal wird verbunden mit der Funktion des GameLoops. Der GameLoop hat dafür dann keine eigene while schleife mehr. Er loopt also nicht mehr selber sondern wird durch die Signals geloopt.
Funktioniert auch gant gut.
Meine Frage dazu: Der Timer ist natürlich viel schneller als die GameLoopFunktion. Was passiert Qt intern wenn das timeout() Signal emitiert wird aber der durchlauf des letzten GameLoops noch nicht fertig ist.
Wird die GameLoopFunktion dann trotzdem sofort ausgeführt obwohl die alte noch läuft?
Werden die Signale zwischengespeichert bis die Funktion durchgelaufen ist?
Und was passiert wenn ganz viele Signale darauf warten? Werden diese zusammengefaßt zu einem oder entsteht irgendwann eine Art StackOverflow, weil mehr dazu kommen als abgearbeitet werden.
Ich benutzt nur einen Thread. Before ich das exec() von der QApplication ausführe starte ich einen QTimer mit msecs = 1. Das timeout() signal wird verbunden mit der Funktion des GameLoops. Der GameLoop hat dafür dann keine eigene while schleife mehr. Er loopt also nicht mehr selber sondern wird durch die Signals geloopt.
Funktioniert auch gant gut.
Meine Frage dazu: Der Timer ist natürlich viel schneller als die GameLoopFunktion. Was passiert Qt intern wenn das timeout() Signal emitiert wird aber der durchlauf des letzten GameLoops noch nicht fertig ist.
Wird die GameLoopFunktion dann trotzdem sofort ausgeführt obwohl die alte noch läuft?
Werden die Signale zwischengespeichert bis die Funktion durchgelaufen ist?
Und was passiert wenn ganz viele Signale darauf warten? Werden diese zusammengefaßt zu einem oder entsteht irgendwann eine Art StackOverflow, weil mehr dazu kommen als abgearbeitet werden.