std::promise<R>:: set_exception
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Getting the result | ||||
| Setting the result | ||||
|
promise::set_exception
|
||||
| Non-member Functions | ||||
| Helper Classes | ||||
|
void
set_exception
(
std::
exception_ptr
p
)
;
|
(depuis C++11) | |
Stocke atomiquement le pointeur d'exception p dans l'état partagé et rend l'état prêt.
L'opération se comporte comme si
set_value
,
set_exception
,
set_value_at_thread_exit
, et
set_exception_at_thread_exit
acquéraient un mutex unique associé à l'objet promise lors de la mise à jour de l'objet promise.
Une exception est levée s'il n'y a pas d'état partagé ou si l'état partagé stocke déjà une valeur ou une exception.
Les appels à cette fonction n'introduisent pas de courses de données avec les appels à get_future (par conséquent, ils n'ont pas besoin de se synchroniser entre eux).
Table des matières |
Paramètres
| p | - | pointeur d'exception à stocker. Le comportement est indéfini si p est nul |
Valeur de retour
(aucun)
Exceptions
std::future_error dans les conditions suivantes :
- * this n'a pas d'état partagé. Le code d'erreur est défini sur no_state .
- L'état partagé stocke déjà une valeur ou une exception. Le code d'erreur est défini sur promise_already_satisfied .
Exemple
#include <future> #include <iostream> #include <thread> int main() { std::promise<int> p; std::future<int> f = p.get_future(); std::thread t([&p] { try { // code that may throw throw std::runtime_error("Example"); } catch (...) { try { // store anything thrown in the promise p.set_exception(std::current_exception()); // or throw a custom exception instead // p.set_exception(std::make_exception_ptr(MyException("mine"))); } catch (...) {} // set_exception() may throw too } }); try { std::cout << f.get(); } catch (const std::exception& e) { std::cout << "Exception from the thread: " << e.what() << '\n'; } t.join(); }
Sortie :
Exception from the thread: Example
Voir aussi
|
définit le résultat pour indiquer une exception tout en différant la notification jusqu'à la fin du thread
(fonction membre publique) |