Синхронизация вычислений со временем
Пытаюсь синхронизировать вычисления с реальным временем. Моя реализация:
#include <iostream>
#include <chrono>
#include <thread>
using namespace std::literals::chrono_literals;
inline void some_complex_work()
{
// pass
};
int main(int, char* [])
{
using clock = std::chrono::steady_clock;
int i{ 1000 + 1 };
clock::time_point next_time_point{};
clock::time_point start = clock::now();
while(--i)
{
next_time_point = clock::now() + 1ms;
some_complex_work();
std::this_thread::sleep_until(next_time_point);
}
clock::duration execution_time = clock::now() - start;
double dt = execution_time.count() / 1000'000'000.0;
std::cout << "dt = " << dt << std::endl;
return 0;
}
В цикле 1000 раз делаю sleep_until на 1 миллисекунду. В результате хотелось бы dt получить близкое к 1. Но на домашнем компьютере dt ~ 15 сек, на godbolt dt ~ 6 сек. Почему такая большая задержка получается при шаге 1ms? И есть ли способ сделать такой таймер?