码迷,mamicode.com
首页 > 编程语言 > 详细

c++11の异步方法

时间:2017-03-22 13:17:22      阅读:163      评论:0      收藏:0      [点我收藏+]

标签: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;
}

 

c++11の异步方法

标签:val   sleep   this   main   sync   future   height   执行   promise   

原文地址:http://www.cnblogs.com/xietianjiao/p/6598931.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!