lundi 12 août 2019

std::condition_variable limiting framerate

Im a little confused on how i could use std::condition_variable to limit my framerate.

reason i woulr like to use std::condition_variable is because sleep in not accurate enough for my liking.

( frames go over the set limit)

globals

float FPS = 1000.f / 200.f;
std::chrono::system_clock::time_point start = std::chrono::system_clock::now();
std::chrono::system_clock::time_point end = std::chrono::system_clock::now();
std::condition_variable _condvar;
std::mutex _mutex;

in hooked function

start = std::chrono::system_clock::now();
std::chrono::duration<double, std::milli> elapsed_seconds = start - end;

std::unique_lock<std::mutex> lock(_mutex);
_condvar.wait(lock, [&] {return elapsed_seconds.count() < FPS; });

//if (elapsed_seconds.count() < FPS)
//{
//  std::chrono::duration<double, std::milli> delta_ms(FPS - elapsed_seconds.count());
//  auto delta_ms_duration = std::chrono::duration_cast<std::chrono::milliseconds>(delta_ms);
//  std::this_thread::sleep_for(std::chrono::milliseconds(delta_ms_duration.count()));
//}

end = std::chrono::system_clock::now();
std::chrono::duration<double, std::milli> sleep_time = end - start;

Aucun commentaire:

Enregistrer un commentaire