РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
815 of 815 menu

Класс packaged_task

Класс packaged_task из заголовочного файла <future> представляет собой обертку для вызываемого объекта (функции, лямбды или функтора), которая позволяет запускать этот объект асинхронно и получать результат его выполнения через связанный объект future. В первый параметр шаблона мы передаем сигнатуру вызываемого объекта, например int(int, int). В конструктор мы передаем сам вызываемый объект, а метод get_future возвращает связанный future, через который позже можно получить результат. Сам packaged_task не запускает задачу - это делается вручную через оператор operator или передачей в thread.

Синтаксис

#include <future> std::packaged_task<ReturnType(ArgTypes...)> task(func); std::future<ReturnType> fut = task.get_future();

Пример

Давайте создадим packaged_task, который складывает два числа, и получим результат через связанный future:

#include <iostream> #include <future> using namespace std; int add(int a, int b) { return a + b; } int main() { packaged_task<int(int, int)> task(add); future<int> res = task.get_future(); task(2, 3); cout << res.get() << endl; return 0; }

Результат выполнения кода:

5

Пример

Давайте передадим packaged_task в отдельный поток и получим результат асинхронно через future:

#include <iostream> #include <future> #include <thread> using namespace std; int main() { packaged_task<int(int, int)> task([](int a, int b) { return a * b; }); future<int> res = task.get_future(); thread t(move(task), 4, 5); t.join(); cout << res.get() << endl; return 0; }

Результат выполнения кода:

20

Смотрите также

  • класс future,
    который получает результат асинхронной операции
  • класс promise,
    который хранит значение для future
  • функция async,
    которая запускает задачу асинхронно
  • метод get,
    который возвращает результат из future
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить