через заданные промежутки времени?
Цикл, в нём измерение времени, и вызов.
#include <future> #include <chrono> #include <thread> int main() { using namespace std::chrono_literals; auto period = 2s; auto times = 2; auto f = std::async(std::launch::async, [period, times] mutable { for( ;times; --times) { auto awaik = std::chrono::high_resolution_clock::now() + period; // doing something std::this_thread::sleep_for(1s); std::this_thread::sleep_until(awaik); } }); f.get(); }
А зачем std::this_thread::sleep_for(1s);? вроде бы нужно только std::this_thread::sleep_until(awaik);
показать видимость деятельности, а так // doing something
Здравствуйте! Сделал, как Вы посоветовали, но почему-то выполнение основной проги начинается только после завершения доп.потока...
Основная программа – это после f.get()?
Логично, потому что f.get() – блокирующий вызов
Ну вызови его после основного кода
тогда он запуститься только после завершения основного кода...
только проверил
Поиграйся с этим, подумай: #include <iostream> #include <thread> #include <future> #include <chrono> int main(int argc, char *argv[]) { using namespace std::chrono_literals; auto f = std::async(std::launch::async, [](){ std::cout << "Hello, async\n"; }); std::this_thread::sleep_for(1s); std::cout << "Hello, main\n"; f.get(); }
Наверное sleep надо было а лямбду
Не, почитай тред. Человек мне говорил, мол, если вызвать get() после кода мейна, то асинк только тогда исполняться начнёт
Ну это если лаунч::деферред
Ну а у нас ни в коем случае не так
Такое возможно, если политику не передавать, то в некоторых имплементациях там по умолчанию там дефферед
Да даже если передавать асинк политику возможно
Лучше объясню, что нужно, а то непонятки пошли. В main крутится основной код, а в доп.поток я хотел вынести считывание по таймеру данных с юсб-железки
в твоем примере где должен быть основной код? если до f.get(); доп.поток не запустится, а после запуска будет ожидать его завершения или я что-то не понимаю?
Да, ты не понимаешь. Запусти этот код.
Основной код – это и есть вывод в мейне
все заработало, спасибо! оказалось, железка глюканула и массив был пустой, а я думал что доп.поток не стартует...
Обсуждают сегодня