网上找了一份c++异步线程的例子可以帮忙解答下吗?

main函数里面breakCode(); 是什么意思,退出线程吗

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

using namespace std::chrono;
std::string getData()
{
    //确保函数要5秒才能执行完成
    std::this_thread::sleep_for(seconds(5));
    return "Q是德华";
}

void breakCode()
{
    //确保函数要5秒才能执行完成
    std::this_thread::sleep_for(seconds(10));
    return;
}


int main()
{
    std::cout << "开始" << std::endl;
    //获取开始时间
    system_clock::time_point start = system_clock::now();

    std::future<std::string> strFuSec = std::async(std::launch::async, getData);
    breakCode();

    //数据在future<std::string>对象中可获取之前,将一直阻塞
    std::string strData = strFuSec.get();

    //获取结束时间
    auto end = system_clock::now();
    auto diff = duration_cast<std::chrono::seconds>(end - start).count();

    std::cout << "用时" << diff << "秒" << std::endl;
    std::cout << strData << std::endl;

    return 0;
}
阅读 2.7k
3 个回答

std::this_thread::sleep_for(seconds(10));
阻塞当前线程(即调用的线程,上文中即主线程) 10 秒

运行上述代码,打印:用时 10 秒

参考文档:https://www.apiref.com/cpp-zh...

这段代码演示了如何使用C++的并发编程库来异步执行一个函数并等待其完成。

首先,代码包含了一些头文件,包括iostream、string、chrono、thread和future。

接着定义了一个名为getData的函数,这个函数会在5秒后返回一个字符串"Q是德华"。

然后定义了一个名为breakCode的函数,这个函数会在10秒后返回。

在main函数中,先输出了一个开始的信息。然后使用system_clock::now()获取了当前时间作为程序的开始时间。

接下来,使用std::async来创建一个异步任务,该任务将调用getData函数。std::launch::async参数表示任务将在新的线程中异步执行。将该任务的返回值存储在名为strFuSec的future对象中。

随后,调用breakCode函数,这个函数会阻塞程序执行10秒钟。

在breakCode函数执行期间,程序会在std::future的get()函数处阻塞等待异步任务完成并获取其返回值。一旦异步任务完成,std::future对象就可以获取到函数的返回值,get()函数将返回该值。

获取异步任务的返回值后,程序再次使用system_clock::now()获取当前时间,计算出程序的结束时间,并计算程序运行的时间差。最后,程序输出运行时间和getData函数的返回值。

总的来说,这段代码演示了如何使用std::async和std::future来实现异步编程,从而提高程序的效率和响应性。

chatgpt解答
image.png

推荐问题