最近看到源码中有很多地方使用了future,packaged_task,上网搜搜,加上自己理解,使用一下,让自己看代码的时候能更加方便。
1.std::future和std::promise
std::future
顾名思义是等待,希望的意思,std::promise
顾名思义是承诺,则我们可以理解成,一个给与承诺,一个等待承诺。
通过建立一个承诺者std::promise
,一个等待承诺者std::future
,std::future
是每一个承诺者std::promise
中所带有的,通过std::future<int> dataFuture = dataPromise.get_future();
,建立一个std::future
,然后通过调用dataFuture.get()
进行等待,此时是阻塞的,直到线程thPromise
调用了dataPromise.set_value(10)
,将数据放进了承诺者中,则此时dataFuture.get()
,得到数据,得到的值就是set_value中的数据。
参考代码如下:
#include <iostream>
#include <future>
int main()
{
std::promise<int> dataPromise; //建立一个承诺
std::future<int