promise和promise基本原理:
线程1初始化一个promise对象和一个future对象然后把promise传递给线程2
线程2于是对线程1有了一个promise
future相当于一个接受一个promise,用来获取未来线程2传递的值
线程2获取到promise后,需要对这个promise传递有关的数据,之后线程1的future就可以获取数据了。
线程1阻塞等待线程2的数据到达
使用方法:https://blog.csdn.net/hyl999/article/details/106260324
1 promise和future成对出现并绑定:
//声明一个std::promise对象promise1,其保存的值类型为int
std::promise<int> promise1;
//声明一个std::future对象future1,并通过std::promise的get_future()函数与promise1绑定
std::future<int> future1 = promise1.get_future();
2 创建线程:
//创建一个线程t1,将函数Thread_Fun1及对象promise1放在线程里面执行
std::thread t1(Thread_Fun1, std::ref(promise1));
//创建一个线程t2,将函数Thread_Fun2及对象future1放在线程里面执行
std::thread t2(Thread_Fun2, std::ref(future1));
3 线程中对promise对象调用set_value,对future对象调用get
让promise和future的参数是function:
#include <iostream>
#include <future>
#include <chrono>
#include <functional>
//声明一个可调对象T
using T = std::function<int(int)>; //等同于typedef std::function<int(int)> T;
int Test_Fun(int