cplusplus
.com
教程
參考
文章
論壇
C++
教程
參考
文章
論壇
參考
C 庫
<cassert> (assert.h)
<cctype> (ctype.h)
<cerrno> (errno.h)
C++11
<cfenv> (fenv.h)
<cfloat> (float.h)
C++11
<cinttypes> (inttypes.h)
<ciso646> (iso646.h)
<climits> (limits.h)
<clocale> (locale.h)
<cmath> (math.h)
<csetjmp> (setjmp.h)
<csignal> (signal.h)
<cstdarg> (stdarg.h)
C++11
<cstdbool> (stdbool.h)
<cstddef> (stddef.h)
C++11
<cstdint> (stdint.h)
<cstdio> (stdio.h)
<cstdlib> (stdlib.h)
<cstring> (string.h)
C++11
<ctgmath> (tgmath.h)
<ctime> (time.h)
C++11
<cuchar> (uchar.h)
<cwchar> (wchar.h)
<cwctype> (wctype.h)
容器
C++11
<array>
<deque>
C++11
<forward_list>
<list>
<map>
<queue>
<set>
<stack>
C++11
<unordered_map>
C++11
<unordered_set>
<vector>
輸入/輸出
<fstream>
<iomanip>
<ios>
<iosfwd>
<iostream>
<istream>
<ostream>
<sstream>
<streambuf>
多執行緒
C++11
<atomic>
C++11
<condition_variable>
C++11
<future>
C++11
<mutex>
C++11
<thread>
其他
<algorithm>
<bitset>
C++11
<chrono>
C++11
<codecvt>
<complex>
<exception>
<functional>
C++11
<initializer_list>
<iterator>
<limits>
<locale>
<memory>
<new>
<numeric>
C++11
<random>
C++11
<ratio>
C++11
<regex>
<stdexcept>
<string>
C++11
<system_error>
C++11
<tuple>
C++11
<type_traits>
C++11
<typeindex>
<typeinfo>
<utility>
<valarray>
<future>
類
C++11
future
C++11
future_error
C++11
packaged_task
C++11
promise
C++11
shared_future
列舉類
C++11
future_errc
C++11
future_status
C++11
launch
函式
C++11
async
C++11
future_category
packaged_task
C++11
packaged_task::~packaged_task
C++11
packaged_task::packaged_task
成員函式
C++11
packaged_task::get_future
C++11
packaged_task::make_ready_at_thread_exit
C++11
packaged_task::operator()
C++11
packaged_task::operator=
C++11
packaged_task::reset
C++11
packaged_task::swap
C++11
packaged_task::valid
非成員過載
C++11
swap (packaged_task)
非成員特化
C++11
uses_allocator<packaged_task>
參考
<future>
packaged_task
operator()
public member function
<future>
std::
packaged_task
::operator()
void operator()(Args... args);
呼叫儲存的任務
呼叫*儲存的任務*,將其引數
args
轉發給它。
- 如果*儲存的任務*的呼叫成功完成,它返回的值(如果有)將儲存在*共享狀態*中。
- 如果*儲存的任務*的呼叫丟擲異常,該異常將被捕獲並也儲存在*共享狀態*中。
在這兩種情況下,*共享狀態*都會變為*就緒*(這將解除阻止任何當前等待它的執行緒)。
可以透過呼叫先前呼叫成員函式
get_future
返回的*future*物件上的
get
來訪問*共享狀態*。
通常在*
構造時
*指定*儲存的任務*。呼叫它的效果取決於其型別。
如果*儲存的任務*是*函式指標*或*函式物件*,則會轉發引數給呼叫。
如果*儲存的任務*是*指向非靜態成員函式的指標*,它將使用第一個引數作為呼叫成員的物件(這可能是物件、引用或其指標),其餘引數將作為成員函式的引數轉發。
如果它是*指向非靜態資料成員的指標*,它應該只帶一個引數呼叫,並且該函式將儲存在*共享狀態*中對其引數的成員的引用(引數可能是物件、引用或其指標)。
引數
args...
呼叫的引數。
如果*儲存的任務*的型別是*成員指標*,第一個引數應該是定義了該成員的物件(或其引用或指標)。
Args...
是*
packaged_task
*模板引數,它們表示*儲存的任務*的引數型別。
返回值
無。
*儲存的任務*的返回值(如果有)將儲存在*共享狀態*中。
資料競爭
*packaged_task*已被修改。
共享狀態
被修改為
原子操作
(不會導致資料競爭)。
異常安全
基本保證:
如果丟擲異常,*
packaged_task
*處於有效狀態。
此成員函式在以下條件下丟擲異常
exception type
error condition
描述
future_error
future_errc::no_state
該物件沒有*共享狀態*(它是*
預設構造
*的*
packaged_task
*)。
future_error
future_errc::promise_already_satisfied
*儲存的任務*已被呼叫。
此成員函式在引數的任何複製或移動操作丟擲異常時也會丟擲,並且(取決於庫實現)也可能丟擲以報告其他情況。
另見
packaged_task::make_ready_at_thread_exit
呼叫儲存的任務並在執行緒退出時使其就緒
(public member function)
packaged_task::get_future
獲取 future
(public member function)
future::get
獲取值
(public member function)