标准库头文件 <future>

来自cppreference.com
< cpp‎ | header

此头文件是线程支持库的一部分。

目录

(C++11)
存储用作异步检索的值
(类模板) [编辑]
将函数打包以为异步检索存储其返回值
(类模板) [编辑]
(C++11)
等待被异步设置的值
(类模板) [编辑]
等待被异步设置的值(可能为其他 future 所引用)
(类模板) [编辑]
(C++11)
指定 std::async 所用的运行策略
(枚举) [编辑]
指定在 std::futurestd::shared_future 上的定时等待的结果
(枚举) [编辑]
报告关联到 future 或 promise 的错误
(类) [编辑]
鉴别 future 错误码
(枚举) [编辑]
特化 std::uses_allocator 类型特性
(类模板特化) [编辑]
特化 std::uses_allocator 类型特性
(类模板特化) [编辑]

函数

(C++11)
异步运行函数(有可能在新线程中)并返回保有结果的 std::future
(函数模板) [编辑]
鉴别 future 错误类别
(函数) [编辑]
特化 std::swap 算法
(函数模板) [编辑]
特化 std::swap 算法
(函数模板) [编辑]

[编辑] 概要

namespace std {
    enum class future_errc {
        broken_promise = /*implementation-defined*/,
        future_already_retrieved = /*implementation-defined*/,
        promise_already_satisfied = /*implementation-defined*/,
        no_state = /*implementation-defined*/
    };
 
    enum class launch : /*unspecified*/ {
        async = /*unspecified*/,
        deferred = /*unspecified*/,
        /*implementation-defined*/
    };
 
    enum class future_status {
        ready,
        timeout,
        deferred
    };
 
    template <>
    struct is_error_code_enum<future_errc> : public true_type { };
 
    error_code make_error_code(future_errc e) noexcept;
    error_condition make_error_condition(future_errc e) noexcept;
    const error_category& future_category() noexcept;
 
    class future_error;
 
    template <class R> class promise;
    template <class R> class promise<R&>;
    template <> class promise<void>;
 
    template <class R>
    void swap(promise<R>& x, promise<R>& y) noexcept;
 
    template <class R, class Alloc>
    struct uses_allocator<promise<R>, Alloc> : true_type {};
 
    template <class R> class future;
    template <class R> class future<R&>;
    template <> class future<void>;
 
    template <class R> class shared_future;
    template <class R> class shared_future<R&>;
    template <> class shared_future<void>;
 
    template <class> class packaged_task; // 不定义
    template <class R, class... ArgTypes>
    class packaged_task<R(ArgTypes...)>;
 
    template <class R>
    void swap(packaged_task<R(ArgTypes...)>&,
              packaged_task<R(ArgTypes...)>&) noexcept;
 
    template <class R, class Alloc>
    struct uses_allocator<packaged_task<R>, Alloc> : true_type {};
 
    template <class F, class... Args>
     future<result_of_t<decay_t<F>(decay_t<Args>...)>>
     async(F&& f, Args&&... args);
 
    template <class F, class... Args>
     future<result_of_t<decay_t<F>(decay_t<Args>...)>>
     async(launch policy, F&& f, Args&&... args);
}

[编辑] std::future_error

class future_error : public logic_error {
 public:
    explicit future_error(error_code ec); // C++17 前仅为说明
    const error_code& code() const noexcept;
    const char* what() const noexcept;
};

[编辑] std::promise

template <class R>
class promise {
 public:
    promise();
    template <class Allocator>
    promise(allocator_arg_t, const Allocator& a);
    promise(promise&& rhs) noexcept;
    promise(const promise& rhs) = delete;
    ~promise();
 
    // 赋值
    promise& operator=(promise&& rhs) noexcept;
    promise& operator=(const promise& rhs) = delete;
    void swap(promise& other) noexcept;
 
    // 取得结果
    future<R> get_future();
 
    // 设置结果
    void set_value(/*see description*/);
    void set_exception(exception_ptr p);
 
    // 以延迟通知设置结果
    void set_value_at_thread_exit(/*see description*/);
    void set_exception_at_thread_exit(exception_ptr p);
};

[编辑] std::future

template <class R>
class future {
 public:
    future() noexcept;
    future(future &&) noexcept;
    future(const future& rhs) = delete;
    ~future();
    future& operator=(const future& rhs) = delete;
    future& operator=(future&&) noexcept;
    shared_future<R> share();
 
    // 取得值
    /*see description*/ get();
 
    // 检查状态的函数
    bool valid() const noexcept;
    void wait() const;
    template <class Rep, class Period>
    future_status wait_for(const chrono::duration<Rep, Period>& rel_time) const;
    template <class Clock, class Duration>
    future_status wait_until(const chrono::time_point<Clock, Duration>& abs_time) const;
};

[编辑] std::shared_future

template <class R>
class shared_future {
 public:
    shared_future() noexcept;
    shared_future(const shared_future& rhs);
    shared_future(future<R>&&) noexcept;
    shared_future(shared_future&& rhs) noexcept;
    ~shared_future();
    shared_future& operator=(const shared_future& rhs);
    shared_future& operator=(shared_future&& rhs) noexcept;
 
    // 取得值
    /*see description*/ get() const;
 
    // 检查状态的函数
    bool valid() const noexcept;
    void wait() const;
    template <class Rep, class Period>
    future_status wait_for(const chrono::duration<Rep, Period>& rel_time) const;
    template <class Clock, class Duration>
    future_status wait_until(const chrono::time_point<Clock, Duration>& abs_time) const;
};

[编辑] std::packaged_task

template<class> class packaged_task; // 不定义
 
template<class R, class... ArgTypes>
class packaged_task<R(ArgTypes...)> {
 public:
    // 构造与析构
    packaged_task() noexcept;
    template <class F>
    explicit packaged_task(F&& f);
    template <class F, class Allocator>
    explicit packaged_task(allocator_arg_t, const Allocator& a, F&& f); // C++17 前
    ~packaged_task();
 
    // 无复制
    packaged_task(const packaged_task&) = delete;
    packaged_task& operator=(const packaged_task&) = delete;
 
    // 移动支持
    packaged_task(packaged_task&& rhs) noexcept;
    packaged_task& operator=(packaged_task&& rhs) noexcept;
 
    void swap(packaged_task& other) noexcept;
    bool valid() const noexcept;
 
    // 结果取得
    future<R> get_future();
 
    // 执行
    void operator()(ArgTypes... );
    void make_ready_at_thread_exit(ArgTypes...);
 
    void reset();
};