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
*