# std::packaged_task<R(Args...)>::make_ready_at_thread_exit

< cpp‎ | thread‎ | packaged task

void make_ready_at_thread_exit( ArgTypes... args ); |  | (C++11 起)

以转发的 `args` 为参数调用存储的任务。任务返回值或任何抛出的异常被存储于 *this 的共享状态。

仅在当前线程退出，并销毁所有线程局域存储期对象后，才令共享状态就绪。

### 参数

args | - | 调用时传递给存储任务的参数

### 返回值

（无）

### 异常

遇到下列条件时为 std::future_error ：

- 已调用存储的任务。设置 error_category 为 `promise_already_satisfied` 。
- *this 无共享状态。设置 error_category 为 `no_state` 。

### 示例

    #include <future>
    #include <iostream>
    #include <chrono>
    #include <thread>
    #include <functional>
    #include <utility>

    void worker(std::future<void>& output)
    {
        std::packaged_task<void(bool&)> my_task{ [](bool& done) { done=true; } };

        auto result = my_task.get_future();

        bool done = false;

        my_task.make_ready_at_thread_exit(done); // 立即执行任务

        std::cout << "worker: done = " << std::boolalpha << done << std::endl;

        auto status = result.wait_for(std::chrono::seconds(0));
        if (status == std::future_status::timeout)
            std::cout << "worker: result is not ready yet" << std::endl;

        output = std::move(result);
    }

    int main()
    {
        std::future<void> result;

        std::thread{worker, std::ref(result)}.join();

        auto status = result.wait_for(std::chrono::seconds(0));
        if (status == std::future_status::ready)
            std::cout << "main: result is ready" << std::endl;
    }

输出：

    worker: done = true
    worker: result is not ready yet
    main: result is ready

### 参阅

operator() | 执行函数 (公开成员函数)