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

Метод set_exception

Метод set_exception класса promise сохраняет исключение в общем состоянии. Это исключение будет выброшено в потоке, который вызовет метод get у связанного объекта future. В первый параметр мы передаем объект исключения std::exception_ptr, который можно получить с помощью функции std::current_exception или std::make_exception_ptr. Метод не принимает других параметров и возвращает void.

После вызова set_exception объект promise считается выполненным. Повторный вызов set_exception или set_value приведет к выбросу исключения std::future_error с кодом std::future_errc::promise_already_satisfied.

Синтаксис

promise.set_exception(exception_ptr)

Пример

Давайте создадим promise, сохраним в него исключение и получим его через future:

#include <iostream> #include <future> #include <stdexcept> using namespace std; int main() { promise<int> prom; future<int> fut = prom.get_future(); try { throw runtime_error("something went wrong"); } catch (...) { prom.set_exception(current_exception()); } try { cout << fut.get() << endl; } catch (const exception& e) { cout << e.what() << endl; } return 0; }

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

"something went wrong"

Пример

Давайте сохраним исключение с помощью make_exception_ptr без использования блока try-catch:

#include <iostream> #include <future> #include <stdexcept> using namespace std; int main() { promise<int> prom; future<int> fut = prom.get_future(); prom.set_exception( make_exception_ptr(logic_error("invalid state")) ); try { cout << fut.get() << endl; } catch (const exception& e) { cout << e.what() << endl; } return 0; }

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

"invalid state"

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

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