C++11多线程------std::async

版权声明:所有的博客都是个人笔记,交流可以留言或者加QQ:2630492017 https://blog.csdn.net/qq_35976351/article/details/85013848

std::async可以认为是封装了一个std::promise,该函数返回一个std::future,用于获取其他线程的数据。

一般有两种模式:

  • std::lanch::async:最常用的异步模式,每次都要执行一遍
  • std::lanch::defer:只在第一次调用的时候执行,之后再调用返回之前的调用结果。

给出代码示例:

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

using namespace std::chrono;

std::string fetchDataFromDB(const std::string& recvData) {
    std::this_thread::sleep_for(seconds(3));
    return "DB" + recvData;
}

std::string fetchDataFromFile(const std::string& recvData) {
    std::this_thread::sleep_for(seconds(3));
    return "File" + recvData;
}

int main() {
    system_clock::time_point start = system_clock::now();
    std::future<std::string> resultFromDB = std::async(std::launch::async,
        fetchDataFromDB, "Data");
    std::string fileData = fetchDataFromFile("Data");
    std::string dbData = resultFromDB.get();

    auto end = system_clock::now();
    auto diff = duration_cast<std::chrono::seconds>(end - start).count();
    std::cout << "Total Time Taken = " << diff << " Seconds" << std::endl;

    std::string data = dbData + "::" + fileData;
    std::cout << "Data = " << data << std::endl;

    system("pause");
    return 0;
}

运行结果:

猜你喜欢

转载自blog.csdn.net/qq_35976351/article/details/85013848