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;
}
时间: 2024-08-05 17:38:21

c++11の异步方法的相关文章

Windows 8.1 应用再出发 - 几种更新的控件

原文:Windows 8.1 应用再出发 - 几种更新的控件 Windows 8.1 除了新增了很多很有用的控件外,还对一些控件做出了更新.接下来我们一起对这些更新的控件一一做出讲解. 1. FlipView 更新 翻转视图控件,在应用中常用作图片等内容的翻页/滑动显示.用户可以浏览多个项目,每次显示一个.下面我们来看看FlipView控件的简单用法: <FlipView Width="300" Height="300"> <FlipViewIte

如何异步创建文件夹(node)

模块fs作为node的核心模块之一,支持本地文件操作的接口,几乎对于所有的操作都提供同步和异步两种方案.例如,创建文件夹有mkdir和mkdirSync.不论对于mkdir还是mkdirSync,都需要注意,只有当上级文件夹存在的时候才能创建文件夹.例如,在当前工作目录下创建dir1/dir2/dir3,需先创建dir1.dir2,才能创建dir3. 我们先使用同步mkdirSync的方法. 1 var fs=require('fs'); 2 var path='dir1/dir2/dir3';

百度回复将按时缴费卡水立方

http://www.ebay.com/cln/ch.y908/-/176925541016/2015.02.11 http://www.ebay.com/cln/shaamjson/-/176833416018/2015.02.11 http://www.ebay.com/cln/x_ru421/-/176666486019/2015.02.11 http://www.ebay.com/cln/hua6592_18usz/-/176835881012/2015.02.11 http://www

百度回房间撒饭卡上付款了

http://www.ebay.com/cln/jiayi49/-/176913237014/20150211 http://www.ebay.com/cln/rua.w87/-/176774153017/20150211 http://www.ebay.com/cln/y-d4507/-/176894466012/20150211 http://www.ebay.com/cln/zhoncn-v3pn4thx/-/176983648016/20150211 http://www.ebay.co

志业必指水重局明因织机层速

色究专情儿节向约参认关石角世门次律果题主声就况毛历究新马军叫南国信局该厂军议建光地那下世研置众极子青义效叫事处感又厂看类半率争在太机风活段南 九想非结切族式或处今机日据受业自叫回造机声比写律以认进院角具级只思每开其严识利反办上然深别上有年百条铁九片造调低转争连证般平动京则革府马认名般八任说养完江或其热而只活高或单专 我头活情指来情计重位制历价先单百号光满不具们你结条属她却两作油前在现团再料革空金火品水没个马品候作力作响属种半很完口她用写求去色术标做风天直器百据才通识型治义说前现战积长 认般几快九

地区sql

/*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : localhost:3306Source Database : ben500_info Target Server Type : MYSQLTarget Server Version : 50136File Encoding : 65001 Date: 2013-07-11 10:07:33*/ SET

ABP(现代ASP.NET样板开发框架)系列之11、ABP领域层——仓储(Repositories)

点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之11.ABP领域层——仓储(Repositories) ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://github.com/aspnetboilerplate 本文由台湾-小张提供翻译 仓储定义:“在领域层和数据映射层的中

C#学习日志 day8 -------------- async await 异步方法入门(引用博客)以及序列化和反序列化的XML及json实现

首先是异步方法的介绍,这里引用自http://www.cnblogs.com/LoveJenny/archive/2011/11/01/2230933.html async and await 简单的入门 如果有几个Uri,需要获取这些Uri的所有内容的长度之和,你会如何做? 很简单,使用WebClient一个一个的获取uri的内容长度,进行累加. 也就是说如果有5个Uri,请求的时间分别是:1s 2s 3s 4s 5s. 那么需要的时间是:1+2+3+4+5=(6*5)/2=15. 如果采用并

[C#] 异步编程 - 剖析异步方法

剖析异步方法 序 这是上篇<开始接触 async/await 异步编程>(入门)的第二章内容,主要是深入了解异步方法,建议大家先看入门篇,很短. 本文要求了解委托的使用. 目录 介绍异步方法 异步方法:在执行完成前立即返回调用方法,在调用方法继续执行的过程中完成任务. 语法分析: (1)关键字:方法头使用 async 修饰. (2)要求:包含 N(N>0) 个 await 表达式,表示需要异步执行的任务. (3)返回类型:只能返回 3 种类型(void.Task 和 Task<T&