Синхронизация вычислений со временем

Пытаюсь синхронизировать вычисления с реальным временем. Моя реализация:

#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;
}

godbolt

В цикле 1000 раз делаю sleep_until на 1 миллисекунду. В результате хотелось бы dt получить близкое к 1. Но на домашнем компьютере dt ~ 15 сек, на godbolt dt ~ 6 сек. Почему такая большая задержка получается при шаге 1ms? И есть ли способ сделать такой таймер?


Ответы (0 шт):