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