promise用于在多个线程间传值,多用于一个线程执行到某个状态后,把自己的信息传递给另外一个线程(该线程在拿到这个信息前,会阻塞等待):
#include <iostream>
#include <thread>
#include <future>
#include <chrono>
#include <functional>
using namespace std;
void init(promise<int> &p)
{
this_thread::sleep_for(chrono::seconds(1));
cout<<"init ok"<<endl;
p.set_value(1); //对promise赋值
this_thread::sleep_for(chrono::seconds(2));
cout<<"init done"<<endl;
}
int main ()
{
promise<int> pr1; //相当于一个对将来会被设置一个值的承诺
future<int> fu1 = pr1.get_future(); //每个promise对象都有一个对应的future对象,future对象用于管理未来的值
thread t1 (init, ref(pr1));
auto status = fu1.get(); //在promise赋值前一直阻塞,promise赋值后可以那到对应的值
cout<<"get init status:"<<status<<endl;
t1.join();
cout<<"t1 join"<<endl;
r