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
)
;
|
(C++11以降) | |
共有状態に例外ポインタ p をアトミックに格納し、状態をready状態にします。
この操作は、promiseオブジェクトの更新中に、
set_value
、
set_exception
、
set_value_at_thread_exit
および
set_exception_at_thread_exit
がpromiseオブジェクトに関連付けられた単一のミューテックスを獲得するかのように振る舞います。
共有状態が存在しない場合、または共有状態が既に値または例外を格納している場合、例外がスローされます。
この関数の呼び出しは、 get_future の呼び出しとの間でデータ競合を引き起こしません (したがって、これらは互いに同期を取る必要はありません)。
目次 |
パラメータ
| p | - | 格納する例外ポインタ。 p がnullの場合の動作は未定義 |
戻り値
(なし)
例外
std::future_error が以下の条件で発生します:
- * this は共有状態を持ちません。エラーコードは no_state に設定されています。
- 共有状態は既に値または例外を格納しています。エラーコードは promise_already_satisfied に設定されています。
例
#include <future> #include <iostream> #include <thread> int main() { std::promise<int> p; std::future<int> f = p.get_future(); std::thread t([&p] { try { // 例外をスローする可能性のあるコード throw std::runtime_error("Example"); } catch (...) { try { // promiseにスローされた例外を保存 p.set_exception(std::current_exception()); // または代わりにカスタム例外をスロー // p.set_exception(std::make_exception_ptr(MyException("mine"))); } catch (...) {} // set_exception()もスローする可能性あり } }); try { std::cout << f.get(); } catch (const std::exception& e) { std::cout << "スレッドからの例外: " << e.what() << '\n'; } t.join(); }
出力:
スレッドからの例外: Example
関連項目
|
スレッド終了時のみ通知を配信しながら、結果を例外を示すように設定する
(public member function) |