A timer-based solution is never going to be exactly synchronized with the screen. sleep_until will never wake up at exactly the right moment in time. But if you're doing this:
while (true) {
render_frame();
present_to_screen();
this_thread::sleep_until(nextFrame);
nextFrame += frameTime;
}
...then you could try doing this instead:
while (true) {
render_frame();
this_thread::sleep_until(nextFrame);
present_to_screen();
nextFrame += frameTime;
}
Also, 60Hz is a pretty crappy screen refresh rate.