首页 > 代码库 > c++11の异步方法
c++11の异步方法
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; }
c++11の异步方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。