Search code examples
c++loopsframe-ratedelta

Limit while loop to run at 30 "FPS" using a delta variable C++


I basically need a while loop to only run at 30 "FPS". I was told to do this: "Inside your while loop, make a deltaT , and if that deltaT is lesser than 33 miliseconds use sleep(33-deltaT) ."

But I really wasn't quite sure how to initialize the delta/what to set this variable to. I also couldn't get a reply back from the person that suggested this.

I'm also not sure why the value in sleep is 33 instead of 30.

Does anyone know what I can do about this?

This is mainly for a game server to update players at 30FPS, but because I'm not doing any rendering on the server, I need a way to just have the code sleep to limit how many times it can run per second or else it will process the players too fast.


Solution

  • You basically need to do something like this:

    int now = GetTimeInMilliseconds();
    int lastFrame = GetTimeInMilliseconds();
    
    while(running)
    {
        now = GetTimeInMilliseconds();
        int delta = now - lastFrame;
        lastFrame = now;
    
        if(delta < 33)
        {
            Sleep(33 - delta);
        }
    
        //...
        Update();
        Draw();
    }
    

    That way you calculate the amount of milliseconds passed between the current frame and last frame, and if it's smaller than 33 millisecods (1000/30, 1000 milliseconds in a second divided by 30 FPS = 33.333333....) then you sleep until 33 milliseconds has passed. Has for GetTimeInMilliseconds() and Sleep() function, it depends on the library that you're using and/or the platform.