zoukankan      html  css  js  c++  java
  • C++ 0x std::async 的应用

     1 #include <iostream>
     2 #include <thread>
     3 #include <mutex>
     4 #include <vector>
     5 #include <algorithm>
     6 #include <future>
     7 using namespace std;
     8 
     9 /*
    10     知识点:
    11         this_thread : 当前线程
    12         chrono::system_clock::now() : 系统的当前时间点
    13         future<void> async(std::launch::async,[](){...}) : 启动一个任务,返回的是一个 future 但一般直接 auto
    14         this_thread::sleep_for(chrono::seconds(1))  : 将当前线程休眠1秒
    15         chrono::duration_cast<chrono::milliseconds>(end - begin).count()  :  计算两个时间点之间的差值
    16 */
    17 
    18 // 打印出当前线程的 ID
    19 void PrintThreadID(const char* name) {
    20     cout << name << " Thread id is " << this_thread::get_id() << endl;
    21 }
    22 
    23 int main() {
    24     // 得到开始时的系统时间
    25     auto begin = chrono::system_clock::now();
    26 
    27     /*
    28     可以通过stl::async函数的第一个参数控制任务的并行方式,它有如下三个取值:
    29         launch::async     :   异步方式。这个方式下,所有任务都会新启动一个线程执行
    30         launch::deferred  :   同步方式。 这个方式下,任务不会新启动线程,串行在创建任务的线程中执行。
    31         launch::any       :   综合方式。 这个方式下,会复用创建任务的线程。 (默认值)
    32     */
    33 
    34     // 启动第一个任务 
    35     auto task1 = async([]{
    36         PrintThreadID("Task1");
    37         this_thread::sleep_for(chrono::seconds(1));
    38         return 3;
    39     });
    40 
    41     // 启动第二个任务
    42     auto task2 = async([]{
    43         PrintThreadID("Task2");
    44         this_thread::sleep_for(chrono::seconds(1));
    45         return 5;
    46     });
    47 
    48     // get() 方法,本身就是
    49     cout << task1.get() + task2.get() << endl;
    50 
    51     // 得到结束时的系统时间
    52     auto end = chrono::system_clock::now();
    53 
    54     // 这里是计算开始与结束之间的时间差
    55     cout << "Spend Time : " << chrono::duration_cast<chrono::milliseconds>(end - begin).count() << endl;
    56 
    57     return 0;
    58 }
  • 相关阅读:
    ylbtech-dbs-m-YinTai(银泰网)
    ylbtech-memorandum(备忘录)-数据库设计
    设计工作-Axure
    RegexHelper
    convert image to base64
    MVC Movie App
    ASP.NET MVC file download sample
    MVC架构、WebForm与MVC对比
    第2章 数字之魅——子数组之和的最大值(二维)
    第2章 数字之魅——求数组的子数组之和的最大值
  • 原文地址:https://www.cnblogs.com/easyfrog/p/3459094.html
Copyright © 2011-2022 走看看