future
- std::future 類型模板是為了等待其他線程上的異步結(jié)果,其和 std::promise,std::packaged_task類型模板,還有std::async函數(shù)模板,都是為異步結(jié)果準(zhǔn)備的工具。std::shared_future實(shí)例可以引用同一個異步結(jié)果喳坠。
- std::packaged_task 類型模板可打包一個函數(shù)或其他可調(diào)用對象仿荆,所以當(dāng)函數(shù)通過 std::packaged_task實(shí)例被調(diào)用時楞艾,結(jié)果將會作為異步結(jié)果重父。這個結(jié)果可以通過檢索 std::future 實(shí)例來查找洽糟。
- std::promise 類型模板提供設(shè)置異步結(jié)果的方法阿浓,這樣其他線程就可以通過 std::future 實(shí)例來索引該結(jié)果。
例子
promise
函數(shù)的返回值被保存在promise變量里面默刚,需要的時候可以拿出來用甥郑。
std::promise<int> pr;
std::thread t([](std::promise<int> &pr){
pr.set_value_at_thread_exit(11);
},std::ref(pr));
auto fut = pr.get_future();
std::cout<<fut.get()<<std::endl;
packaged_task
將函數(shù)保存在packaged_task里面,函數(shù)的返回結(jié)果可以在需要的時候取出來用.
std::packaged_task<int()> task([](){return 2;});
std::thread t1(std::ref(task));
std::cout<<task.get_future().get()<<std::endl;
最終都是轉(zhuǎn)化成std::future變量荤西,從此中取出函數(shù)運(yùn)行的結(jié)果澜搅。