Есть несколько способов:
std::async
возвращает std::future
. При попытке получить результат из future (например, с помощью future.get()
) в главном потоке, если в асинхронной задаче произошло исключение, оно будет повторно брошено в главном потоке.std::promise
с помощью promise.set_exception()
. Другой поток может получить(promise.get_future()
) соответствующий std::future
и при вызове future.get()
получить сохраненное исключение.try-catch
блок. В случае исключения, сохранить указатель на него (с помощью std::current_exception()
) или специальный флаг в разделяемой переменной, доступ к которой синхронизирован.boost::exception
: boost::exception
предоставляет более мощные механизмы для захвата, хранения и передачи исключений между потоками, позволяя прикреплять к исключению дополнительную информацию.Пример с std::async
:
cpp
Есть несколько способов:
std::async
возвращает std::future
. При попытке получить результат из future (например, с помощью future.get()
) в главном потоке, если в асинхронной задаче произошло исключение, оно будет повторно брошено в главном потоке.std::promise
с помощью promise.set_exception()
. Другой поток может получить(promise.get_future()
) соответствующий std::future
и при вызове future.get()
получить сохраненное исключение.try-catch
блок. В случае исключения, сохранить указатель на него (с помощью std::current_exception()
) или специальный флаг в разделяемой переменной, доступ к которой синхронизирован.boost::exception
: boost::exception
предоставляет более мощные механизмы для захвата, хранения и передачи исключений между потоками, позволяя прикреплять к исключению дополнительную информацию.Пример с std::async
:
cpp
Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.