asyn 使用

 std::promise 对象可以保存某一类型 T 的值

future 对象读取(可能在另外一个线程中)

std::future仅在创建它的std::promise(或者std::async、std::packaged_task)有效时才有用,所以可以在使用前用valid()判断
std::future可供异步操作创建者用各种方式查询、等待、提取需要共享的值,也可以阻塞当前线程等待到异步线程提供值。
std::future一个实例只能与一个异步线程相关联,多个线程则需要使用std::shared_future。

std::future负责访问, std::future是一个模板类,它提供了可供访问异步执行结果的一种方式。
std::promise负责存储, std::promise也是一个模板类,它提供了存储异步执行结果的值和异常的一种方式。
std::future负责访问,std::promise负责存储,同时promise是future的管理者

 

#include <thread>
#include <iostream>
#include <chrono>
#include <future>

struct _data
{
        int32_t value;
};

_data data = { 0 };

int main()
{
        auto start = std::chrono::steady_clock::now();

        std::future<_data> data_future = std::async(std::launch::async, []()->_data{
                std::this_thread::sleep_for(std::chrono::seconds(100));           //模拟生产过程
                return { 10 };
        });

//      std::this_thread::sleep_for(std::chrono::seconds(2));
        std::cout << data_future.get().value << std::endl;              //使用产出值 ,如果没有返回,这个get会阻塞等待

        auto end = std::chrono::steady_clock::now();
        std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << std::endl;

        system("pause");
        return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值