标签:val sleep this main sync future height 执行 promise
1. std::promise 可以用来在线程间提供数据传递。
std::future = std::promise.get_future()。
线程中可以对promise赋值std::promise.set_value。
赋值之后std::future.get()就会返回其他线程中设置的值。
#include <iostream> #include <future> #include <chrono> std::promise<int> promis; int main(int argc, const char * argv[]) { std::future<int> fuResult = promis.get_future(); std::thread t([](){ std::this_thread::sleep_for(std::chrono::seconds(10)); promis.set_value(123); }); t.detach(); std::cout<<"detach..."<<std::endl; std::cout<<fuResult.get()<<std::endl; return 0; }
2. std::packaged_task 可以包裹一个函数, 有点类似std::function,不同之处在于这个可以通过get_future返回std::future对象来获取异步执行的函数结果。
#include <iostream> #include <future> #include <chrono> int main(int argc, const char * argv[]) { std::packaged_task<int()> m([](){ std::this_thread::sleep_for(std::chrono::seconds(10)); return 123; }); std::future<int> fuResult = m.get_future(); std::thread task(std::move(m)); task.detach(); std::cout<<"detach..."<<std::endl; std::cout<<fuResult.get()<<std::endl; return 0; }
3. std::async提供异步执行的方法,std::future = std::async(...), 函数执行完成后可以通过std::future.get()获取到执行函数的返回值。
#include <iostream> #include <future> #include <chrono> int main(int argc, const char * argv[]) { std::future<int> fuResult = std::async([](){ std::this_thread::sleep_for(std::chrono::seconds(10)); return 1; }); std::cout<<"detach..."<<std::endl; std::cout<<fuResult.get()<<std::endl; return 0; }
标签:val sleep this main sync future height 执行 promise
原文地址:http://www.cnblogs.com/xietianjiao/p/6598931.html