Новый стандарт C ++ 11 поддерживает ряд средств, облегчающих программирование потоков.
Наиболее интересными в вашем случае являются std::future
и std::promise
.
Обратите внимание на функцию std::promise::set_exception_*
. Это позволяет вам направить исключение за пределы его потока происхождения (примечание std::exception_ptr
имеет семантику общего указателя). Вы можете использовать std::current_exception()
(в операторе catch
), чтобы получить требуемый указатель.
Затем обратите внимание на функцию std::future::get
: если promise
, из которого извлечено future
, имеет исключение вместо значения, то оно выдаст исключение.
Это механизм для передачи исключений из одного потока в другой.