Maximale Framezahl festlegen



  • Ich habe folgenden Programmcode geschrieben, der so aufgebaut ist:

    while ( ... )
    {    start = clock();
         ObjektManipulieren(); // Wird ca. alle 1000 Clocks ausgeführt
    
         while ( end-start < 1000 )
         {    AusgabeBildschirm();
              if ( kbhit() )
              {  // reagiere auf Eingaben
              }
              end = clock();
         }
    }
    

    Ich möchte jetzt, dass die Funktion AusgabeBildschirm() nur 25 mal (maximal) pro Sekunde in regelmäßigen Abständen ausgeführt wird.
    Mir fehlt gerade irgendwie die Logik dazu.

    Für Hinweise wäre ich sehr dankbar!



  • Schau doch einfach, ob Δt ein entsprechendes vielfaches ist.



  • öh.

    void foo()
    {
        unsigned now = clock();
        unsigned last = now;
        unsigned bar_timer = 0;
    
        for(;;)
        {
            now = clock();
            unsigned delta_time = now - last;
    
            // limit framerate to ~25fps
            while (delta_time < 40)
            {
                wait_some();
                now = clock();
                delta_time = now - last;
            }
            last = now;
    
            // check for input every frame
            if (kbhit())
            {
                // ...
            }
    
            // call bar every 1000 ms
            bar_timer += delta_time;
            while (bar_timer >= 1000)
            {
                bar();
                bar_timer -= 1000;
            }
            /* alternate version:
            if (bar_timer >= 1000)
            {
                bar();
                bar_timer = 0;
            }
            */
    
            display_frame();
        }
    }
    

Anmelden zum Antworten