gpt4 book ai didi

c++ - 使用 std::async 从线程调用函数?

转载 作者:行者123 更新时间:2023-11-30 04:03:44 25 4
gpt4 key购买 nike

我正在运行两个并行线程。其中一个线程需要在满足条件语句时调用异步函数。我发现 std::async 使用启动策略执行异步函数调用,但我有几个关于它们的问题。

  1. 是否有政策让它等待条件语句发生?据我了解this post , wait_forwait_until 函数有很多种,但是我发现它们都是带时间的函数,这些可以适当修改吗?

  2. async函数结束时会自动调用析构函数吗?

  3. 函数调用会以任何方式影响父线程的功能吗?

最佳答案

当您调用 std::async 时,您将要调用的函数的地址传递给它(连同您要传递给该函数的任何参数)。

然后它创建一个线程来异步执行该函数。它返回一个 future,父线程可以使用它从子线程获取结果。典型的用法是这样的:

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

std::chrono::seconds sec(1);

int process() {
std::cerr << "Doing something slow\n";
std::this_thread::sleep_for(sec);
std::cerr << "done\n";
return 1;
}

int main(int argc, char **argv) {
if (argc > 1) {
auto func = std::async(process);
std::cerr << "doing something else that takes a while\n";
std::this_thread::sleep_for(sec);
func.get();
}
}

请注意,我们只需要在返回的 future 上使用 .get 来同步线程。 sleep_for 只是模拟每个线程做一些至少需要一段时间的事情——如果他们完成得太快,他们就没有机会真正并行执行,因为第一个运行可以在第二个有机会开始运行之前完成并退出。

如果你想创建显式线程(即创建 std::thread 的实例),那就是你最终使用 std::wait_for 等(或无论如何,可以最终使用它们)。对于 futures(即,您使用 std::async 创建的内容),您只需使用 .get 等待线程完成并检索线程函数返回的任何内容。

关于c++ - 使用 std::async 从线程调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24236956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com