【C++中concurrency::task的简单实战使用】

文章目录


concurrency::task应用

#include<iostream>
#include <pplwin.h>     //头文件包含
#include <ppltasks.h>

typedef std::vector<std::shared_ptr<osg::Node>> sharedNodeVec;

void function(int a, int b)
{
   
    //首先需要声明一个变量,比较长,多次声明的话可以typedef一下。
    //std::vector<std::shared_ptr<osg::Node>>是task执行结果的类型。
    //当然,这里是一个vector,里面存放的是osg::Node的指针类型
    concurrency::task_completion_event<std::vector<std::shared_ptr<osg::Node>>> result;
   
    //result是Find函数的一个入参
    std::shared_ptr<Command> command = new Find(result);
   
    //注意!!! function函数用task的原因就是因为executeCommand这个方法执行command是在另外的线程中进行
    //所以result这个入参有了值之后再使用。
    m_render->executeCommand(command);

    // 1. 接下来使用一下这个result,create_task是当result有结果之后再调用.then方法。
    // 2. 这里顺带巩固一下这个lambda函数,‘[]’里面的a或者下面的b都是声明函数的时候给赋的值。
    //(上面的话再说明白一些。不论是lambda函数还是普通函数,肯定是有声明有实现。)
    //所以a和b都是声明的时候给的值,但是调用这个lamaba函数是当‘()’有值的时候(也就是task的result有结果后.then方法被调用之后lambda函数被调用)
    // 3. 这里需要记住的是,这个sharedNodeVec类型就是上面的result变量有值之后的值类型
    concurrency::create_task(result).then([a](const sharedNodeVec& resVec){    
        boost::uuids::random_generator gen;             //boost库的随机数生成器,gen()调用结果的类型是个uuid类型
        for(const auto res : resVec)
        {
            const auto id = res ? boost::uuids::to_wstring(gen()) : "";
            const auto name = res ? res->getName() : "";
        }      
    }).then([b](concurrency::task<void> error){
        //处理错误
    });
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【网络星空】

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值