Вызов функции с помощью времени

129
23 ноября 2020, 05:20

Как сделать вызов функции foo с помощью времени?

Допустим через каждые 5 секунд.

Answer 1

Можно вот так С++11 (не самый оптимальный вариант, но быстрый в реализации):

#include <atomic>
#include <thread>
#include <chrono>
#include <iostream>
template<typename Callback, typename... Args>
std::atomic_bool& set_interval(const std::chrono::milliseconds& interval, Callback callbakc, Args... args)
{
    std::atomic_bool is_running = true;
    auto function = std::bind(std::forward<Callback>(callbakc), std::forward<Args>(args)...);
    std::thread thread([=, &is_running]
    {
        while (is_running)
        {
            std::this_thread::sleep_for(interval);
            function();
        }
    });
    thread.detach();
    return is_running;
}
int main(int argc, char** argv) 
{
    std::atomic_bool& is_running = set_interval(std::chrono::milliseconds(5000), []
    {
        std::cout << "Hello world" << std::endl;
    });
    std::this_thread::sleep_for(std::chrono::milliseconds(25000));
    return EXIT_SUCCESS;
}
READ ALSO
ошибки линковщика

ошибки линковщика

Пишу простое консольное приложение При попытке скомпилировать проект линковщик выдает следующее:

87