国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Visual Studio 11下的C++異步編程1

開發(fā) 后端
我們今天開始這一Visual Studio 11下的C++異步編程系列,今天要講到異步編程的基本單位是task class。

微軟已經(jīng)在VS10中加入了Concurrency Runtime namespace來支持C++的異步編程,筆者認為異步編程在是現(xiàn)代編程語言的一個發(fā)展方向。在此總結一些異步編程的基本概念和語法,希望能給大家理解異步編程帶來一些方便。

首先,異步編程的基本單位是task class。我們把想要執(zhí)行異步操作的函數(shù)放入task 里面,通過協(xié)調(diào)這些task的關系,來實現(xiàn)基于函數(shù)的異步操作。這種方式相對于傳統(tǒng)的基于線程池的異步調(diào)用,開發(fā)者不需要關心底層的線程如何分配,資源如何同步,是否有死鎖的存在。這樣,開發(fā)者會更專注于代碼的邏輯,進而提高編程的效率。

task<T> 是一個模板類,T是函數(shù)返回值的類型,比如task<int> t([](){return 1;}),或者函數(shù)返回值為空task<void> t([](){return;})。task的構造函數(shù)傳入?yún)?shù)可以是lambda表達式。我們聲明了一個task之后,通過調(diào)用wait()方法去執(zhí)行他,對于有返回值的task,我們調(diào)用.get()方法去取得他的返回值。下面是一個簡單的例子

  1. #include <ppltasks.h>  
  2. #include <iostream>  
  3. using namespace Concurrency;  
  4. using namespace std;  
  5. int wmain()  
  6. {  
  7.     task<int> t([]() {  
  8.         return 42;  
  9.     });  
  10.  
  11.     t.wait();  
  12.     wcout << t.get() << endl;  

我們可以用.then()的方法去指定一個連續(xù)的任務,就是在前一個task完成之后立刻執(zhí)行.then()里面的函數(shù)。這個函數(shù)要求接受前一個任務返回的結果。比如前一個任務中函數(shù)返回的是int 那么在.then()的函數(shù)里面就要指定傳入?yún)?shù)為int的lambda表達式()[int res]{ res++;}。.then()方法只要求傳入?yún)?shù)和上一個任務相同,而返回值可以不同。比如下面的代碼,第一個task返回int,在第一個then中返回void,然后返回int,最后返回void。這里要注意的是,在最后一個then()中調(diào)用wait,而不是t.wait(),否則第一個.then 不會執(zhí)行。

  1. task<int> t([]() {  
  2.     return 42;  
  3. });  
  4.  
  5. t.then([](int res){wcout<<"Hello";}).then([](){return 1;}).then([](int res){wcout<<res<<endl;}).wait();  
  6. wcout << t.get() << endl; 

這段代碼展示的是如何嵌套task,注意這里的返回值雖然是task<int>,但是外面的task的參數(shù)依然是int,這兩個參數(shù)要保持一致。

  1. task<int> t([]() {   
  2.     wcout << L"Task A" << endl;  
  3.  
  4.     // Create an inner task that runs before any continuation  
  5.     // of the outer task.  
  6.     return task<int>([]() {  
  7.         wcout << L"Task B" << endl;  
  8.         return 1;  
  9.     });  
  10. }); 

 一組task的執(zhí)行,我們可以把一組task放入到容器里,然后通過when_all(),這個函數(shù)去執(zhí)行他們,when_all傳入?yún)?shù)是容器迭代器的開始和結束。這里要求容器里面的task的返回值必須相同。這是沒有返回值的例子

  1.  // Start multiple tasks.  
  2. array<task<void>, 3> tasks = {  
  3.     task<void>([] { wcout << "Hello from taskA." << endl; }),  
  4.     task<void>([] { wcout << "Hello from taskB." << endl; }),  
  5.     task<void>([] { wcout << "Hello from taskC." << endl; })  
  6. };  
  7. auto joinTask = when_all(tasks.begin(), tasks.end());  
  8. // Print a message from the joining thread.  
  9. wcout << "Hello from the joining thread." << endl;  
  10. // Wait for the tasks to finish.  
  11. joinTask.wait(); 

這是有返回值的例子,注意when_all().then 的傳入?yún)?shù)是vector<T>

  1. // Start multiple tasks.  
  2. array<task<int>, 3> tasks = {  
  3.     task<int>([] { return 88; }),  
  4.     task<int>([] { return 42; }),  
  5.     task<int>([] { return 99; })  
  6. };  
  7.  
  8. auto joinTask = when_all(tasks.begin(), tasks.end())  
  9.                 .then([](vector<int> results)  
  10.     {  
  11.         wcout << "The sum is "   
  12.               << accumulate(results.begin(), results.end(), 0)  
  13.               << L'.' << endl;  
  14.     });  
  15.  
  16. // Print a message from the joining thread.  
  17. wcout << "Hello from the joining thread." << endl;  
  18.  
  19. // Wait for the tasks to finish.  
  20. joinTask.wait(); 

when_all().wait()是當容器里面所有的task都被執(zhí)行后,才繼續(xù)向下執(zhí)行。而when_any().wait()就是當容器里第一個task完成之后,就繼續(xù)向下執(zhí)行。和when_all 一樣,when_any 要求task的返回值相同 。但是,when_any().then()的傳入?yún)?shù)是pair<T, size_t> pair.first 是task的返回值,pair.second是已經(jīng)完成的task的序號。

  1. // Start multiple tasks.  
  2. array<task<int>, 3> tasks = {  
  3.     task<int>([] { return 88; }),  
  4.     task<int>([] { return 42; }),  
  5.     task<int>([] { return 99; })  
  6. };  
  7.  
  8. // Select the first to finish.  
  9. when_any(tasks.begin(), tasks.end())  
  10.     .then([](pair<int, size_t> result)  
  11.     {  
  12.         wcout << "First task to finish returns " 
  13.               << result.first  
  14.               << L" and has index " 
  15.               << result.second  
  16.               << L'.' << endl;  
  17.     }).wait();    

這篇文章是這個系列的第一篇,旨在向大家介紹一些基本的概念和用法。我會在接下來的系列中,給大家展示一些更深層次的東西。

引用自:http://msdn.microsoft.com/en-us/library/windows/apps/dd492427(v=vs.110).aspx

原文鏈接:http://www.cnblogs.com/zjjcy/archive/2012/03/18/2404214.html

責任編輯:彭凡 來源: 博客園
相關推薦

2010-01-12 15:13:37

Visual C++環(huán)

2010-11-10 09:01:50

Visual Stud

2009-03-17 08:56:57

Visual StudVS2010C++

2011-03-30 14:49:00

Visual C++CPU

2010-01-25 16:58:15

C++程序

2012-06-18 10:03:46

Visual Stud

2010-01-20 10:49:29

Visual C++界

2010-03-10 09:28:58

Visual Stud

2009-06-15 14:48:13

Visual C++本狀態(tài)管理

2025-01-27 00:54:31

2012-05-02 14:22:35

Visual Stud

2010-03-17 08:49:49

Visual Stud

2023-04-03 07:08:28

C++函數(shù)模板

2010-09-28 08:52:00

C#Visual Stud

2025-06-30 02:22:00

C++高性能工具

2010-03-15 09:04:09

C++Visual Stud

2012-05-21 16:54:59

Visual Stud

2009-07-01 09:26:56

Visual Stud

2012-03-27 14:42:45

Visual Stud微軟IntelliTrac

2010-01-18 15:40:37

Visual C++工
點贊
收藏

51CTO技術棧公眾號

欧美性猛交xxxx富婆弯腰| 国产精品手机播放| 全色精品综合影院| 国产suv一区二区三区88区| 国产精品对白刺激久久久| 老牛精品亚洲成av人片| 日韩一区在线视频| 久久爱91午夜羞羞| 精品成人免费观看| 制服丝袜在线播放| 91精品国产综合久久香蕉麻豆| 免费在线视频你懂得| 精品久久久久久中文字幕| 国产美女视频黄a视频免费| 国产精品美女一区二区在线观看| 苍井空浴缸大战猛男120分钟| av电影天堂一区二区在线观看| 国产女教师bbwbbwbbw| 麻豆精品精品国产自在97香蕉| 精品国产免费久久久久久尖叫| 亚洲欧美偷拍自拍| 91精品国产一区二区三区动漫 | 国产精品高潮呻吟久久av黑人| 国产精品乱战久久久| 欧美精品激情blacked18| 久久综合给合| 久久99久久99精品中文字幕 | 久久久久久影院| 成人网页在线免费观看| 国产二区精品| 国产日韩换脸av一区在线观看| 中文字幕免费一区二区| 国产精品一级久久久| 首页欧美精品中文字幕| av动漫在线播放| 久久久久久久综合色一本| 激情五月色综合亚洲小说| 一区二区三区四区国产精品| 噜噜噜噜噜在线视频| 精品少妇一区二区三区在线播放| 中文字幕高清在线播放| 欧美精品一区在线播放| 欧美限制电影| 蜜桃av久久久亚洲精品| 国产成人自拍在线| 牛夜精品久久久久久久| 一区二区三区久久| 欧美a在线看| 国产一区二区精品丝袜| 99久久婷婷国产综合精品青牛牛| 在线中文字幕播放| 日本欧美黄色片| 成人国产精品免费观看动漫| 可以免费看的黄色网址| 久久久综合精品| 最近中文字幕mv2018在线高清| 欧美性色视频在线| 男女在线视频| 欧美日韩福利在线观看| 国产精品久久久久久久久妇女| 日本一区二区三区精品视频| 99久精品国产| 最新av免费在线| 精品99999| 噜噜噜天天躁狠狠躁夜夜精品| 国产伦精品一区二区三区照片| 国产91精品精华液一区二区三区| 男人天堂2020| 欧美变态口味重另类| av综合网站| 精品久久久久久中文字幕动漫| 99久久精品费精品国产一区二区| 中文字幕视频在线| 亚洲欧美一区二区精品久久久| 欧美男男gaytwinkfreevideos| 欧美日韩在线精品一区二区三区| 国产日本亚洲高清| 18av在线视频| 97精品免费视频| 男人的天堂亚洲一区| 天天操夜夜干| 尤物tv国产一区| 午夜国产一区| 15—17女人毛片| 亚洲第一区第一页| 日韩欧美一区免费| 精品久久一二三| 欧美日韩国产色站一区二区三区| 精品国产一区二区三区性色av| 国产精品亚洲综合| 国产精品不卡在线| 金瓶狂野欧美性猛交xxxx| 国产成人+综合亚洲+天堂| 国产一区二区免费视频| av网站在线播放| 热门国产精品亚洲第一区在线| 久久国产精品99久久久久久老狼| 亚洲aⅴ优女av综合久久久| www.欧美精品一二三区| 日韩午夜高潮| 国产视频一二区| 深夜福利一区二区| 蜜臀av一区二区在线免费观看| 亚洲精品男人| 日韩av片电影专区| 久久精品一区二区三区av| 亚洲午夜天堂| 午夜老司机精品| 欧美三级视频在线| 日韩影院二区| 性生活免费在线观看| 亚洲性日韩精品一区二区| 丝袜脚交一区二区| 国产69精品久久app免费版| 欧洲日韩成人av| 国产亚洲综合色| 欧美一区国产| 亚洲制服欧美久久| 这里只有精品免费| 国产精品激情电影| 理论在线观看| 91深夜福利视频| 亚洲夂夂婷婷色拍ww47| 精品国产亚洲日本| 欧美一区二区视频在线播放| 亚洲精品一区二区三区影院| 另类国产ts人妖高潮视频| 国产一二三区在线观看| 精品国产第一页| 欧美久久免费观看| 国内精品久久久久久久97牛牛 | 一区二区三区四区五区在线| 国产又黄又猛又粗又爽的视频| 伊人成人开心激情综合网| 激情综合网最新| 96av在线| 熟妇熟女乱妇乱女网站| 日韩国产在线看| 国产美女视频91| 视频在线日韩| 日韩精品一区二区三区久久| 欧美激情亚洲激情| ...xxx性欧美| 91久久夜色精品国产按摩| 精品乱码一区二区三四区视频| 国产一级特黄a大片99| 日韩欧美一级在线播放| 激情综合五月天| 欧美二区观看| 国产激情二区| 91日本在线观看| 欧美日韩高清一区| 麻豆精品一二三| 国产aa精品| 日本特黄a级高清免费大片| 亚洲一区美女视频在线观看免费| 欧美日韩小视频| 国产麻豆午夜三级精品| 6080成人| 噜噜噜噜噜在线视频| 欧美一二三区| 在线播放日韩专区| 亚洲乱码国产乱码精品精的特点| 欧美日韩三区| 亚洲第一会所| 情se视频网在线观看| 视频一区二区精品| 欧美成人精品在线视频| 日韩欧美在线视频日韩欧美在线视频| 久久精品国产清高在天天线| 日韩黄色三级在线观看| 黄色污网站在线免费观看| 欧美在线播放一区二区| 久久综合免费视频| 色综合久久88色综合天天免费| 麻豆成人免费电影| 欧美男人操女人视频| 日本高清视频在线观看| 各处沟厕大尺度偷拍女厕嘘嘘| 国产精品一区二区三区在线播放| 精品国产电影一区二区| 亚洲欧美怡红院| 久久国产乱子精品免费女| 国产伦精品一区二区三区千人斩| 青春草免费在线视频| 网上成人av| 欧美日韩精品免费在线观看视频 | av今日在线| 五月婷婷六月丁香激情| 国产日韩在线一区二区三区| 久久精彩免费视频| 精品视频在线免费看| 国产亚洲美州欧州综合国| 亚洲一区二区毛片| 六月丁香久久丫| 偷拍自拍在线看| 四虎精品成人影院观看地址| 春日野结衣av| 日韩少妇中文字幕| 97超碰国产精品女人人人爽 |