1 详解std::promise

std::promise提供了在异步线程函数中存储值并在当前线程获取值的机制,为获取某个线程函数中的值提供了便利的方法。

原型

template< class R > class promise;
template< class R > class promise<R&>;
template<> class promise<void>;

成员函数

  • set_value:为std::promise设置指定的值
  • set_value_at_thread_exit:为std::promise设置指定的值,但是仅在退出线程时进行通知
  • set_exception:为std::promise设置指定的异常
  • set_exception_at_thread_exit:为std::promise设置指定的异常,但是仅在退出线程时进行通知
  • get_future:获取与std::promise相关联的std::future

2 std::promise使用

下面是std::promise的使用示例,在以下代码中,在主线程中另起了一个子线程用于计算1-1000数的总和,我们将std::promise传递到子线程函数sum,并在计算结果之后将结果设置给std::promise,然后在主线程中使用get_future获取std::promisestd::future,然后通过std::future获取结果。

#include <iostream>
#include <future>

void sum(int start, int end, std::promise<int> promise)
{
    int sum = 0;
    for (int i = start; i < end; ++i)
    {
        sum += i;
    }
    promise.set_value(sum);
}

int main()
{
    int start = 0;
    int end = 1000;

    std::promise<int> temp_promise;
    std::future<int> res = temp_promise.get_future();
    std::thread sum_thread(sum, 1, 1000, std::move(temp_promise));

    std::cout << "result1 = " << res.get() << std::endl;

    sum_thread.join();

    return 0;
}

参考