Incorrect Framerate Limitation in Program

52 Views Asked by At

I am trying to limit the FPS in my program, I also test the FPS to see if I actually limited it correctly, but for some reason, I get incorrect values in my FPS

int main()
{
    float cameraFps = 60;
    auto lastTime = std::chrono::high_resolution_clock::now();
    int targetFrameDurationMilli = 1000 / cameraFps;

    for (int i = 0; i < 100; i++)
    {
        auto cycleStartTime = std::chrono::high_resolution_clock::now();

            
        //Do some process
        std::this_thread::sleep_for(std::chrono::milliseconds(1));


        auto cycleEndTime = std::chrono::high_resolution_clock::now();
        auto processingDurationMilli = std::chrono::duration_cast<std::chrono::milliseconds>(cycleEndTime - cycleStartTime).count();


        if (processingDurationMilli < targetFrameDurationMilli) {
            auto sleepDurationMilli = targetFrameDurationMilli - processingDurationMilli;
            std::this_thread::sleep_for(std::chrono::milliseconds(sleepDurationMilli));
        }

        // Measure total cycle time (processing + sleep) for accurate FPS calculation.
        cycleEndTime = std::chrono::high_resolution_clock::now();
        auto cycleDurationMilli = std::chrono::duration_cast<std::chrono::milliseconds>(cycleEndTime - lastTime);
        lastTime = cycleEndTime;

        double currentFPS = 1000.0 / cycleDurationMilli.count();
        std::cout << "Current FPS: " + std::to_string(currentFPS) << std::endl;
    }
}

I created a small example, I think I'm measing something super obvious here and it's driving me insane..

tried the code above, chat gpt and more eyes to look at

I get the following output:

*
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 32.258065
Current FPS: 32.258065
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 33.333333
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 34.482759
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 31.250000
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 33.333333
Current FPS: 33.333333
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 33.333333
Current FPS: 34.482759
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 33.333333
Current FPS: 33.333333
Current FPS: 33.333333
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 32.258065
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 32.258065
Current FPS: 32.258065
Current FPS: 32.258065
Current FPS: 32.258065
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 33.333333
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 31.250000
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 32.258065
Current FPS: 32.258065
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 33.333333
Current FPS: 34.482759
Current FPS: 32.258065
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 32.258065
Current FPS: 33.333333
Current FPS: 33.333333
Current FPS: 33.333333
Current FPS: 32.258065
Current FPS: 32.258065
*
0

There are 0 best solutions below