std::promise 对象可以保存某一类型 T 的值
future 对象读取(可能在另外一个线程中)
std::future仅在创建它的std::promise(或者std::async、std::packaged_task)有效时才有用,所以可以在使用前用valid()判断
std::future可供异步操作创建者用各种方式查询、等待、提取需要共享的值,也可以阻塞当前线程等待到异步线程提供值。
std::future一个实例只能与一个异步线程相关联,多个线程则需要使用std::shared_future。
std::future负责访问, std::future是一个模板类,它提供了可供访问异步执行结果的一种方式。
std::promise负责存储, std::promise也是一个模板类,它提供了存储异步执行结果的值和异常的一种方式。
std::future负责访问,std::promise负责存储,同时promise是future的管理者
#include <thread>
#include <iostream>
#include <chrono>
#include <future>
struct _data
{
int32_t value;
};
_data data = { 0 };
int main()
{
auto start = std::chrono::steady_clock::now();
std::future<_data> data_future = std::async(std::launch::async, []()->_data{
std::this_thread::sleep_for(std::chrono::seconds(100)); //模拟生产过程
return { 10 };
});
// std::this_thread::sleep_for(std::chrono::seconds(2));
std::cout << data_future.get().value << std::endl; //使用产出值 ,如果没有返回,这个get会阻塞等待
auto end = std::chrono::steady_clock::now();
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << std::endl;
system("pause");
return 0;
}