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)