gpt4 book ai didi

c++ - C++ 11 触发异步任务并忘记它的方法是什么?

转载 作者:IT老高 更新时间:2023-10-28 12:53:42 25 4
gpt4 key购买 nike

我需要这样的东西:

void launch_task()
{
std::thread([](){ run_async_task(); });
}

除了线程的析构函数会终止我的任务。我不需要对任务进行任何控制,也不需要返回值。它只需要运行它的过程,然后线程应该终止并且 C++ 线程对象应该被处理掉。我需要什么 C++ 11 工具?

我查看了 std::async,但找不到适用于我的案例的用法示例。这似乎是一个相当复杂的系统,我需要以某种方式存储和操作 std::future 否则它会变得同步(如果我的理解是正确的;我没有找到一个好的关于 std::async 的明确文章)。

最佳答案

创建后立即将其分离。

std::thread([](){ run_async_task(); }).detach();

一旦分离,线程将不再可连接,因此 ~thread() 将不起作用。 This answer讨论此行为的更多细节。

正如 W.B. 所说。下面,std::async 将无法工作,原因如下,从 reference 中提取.

If the std::future obtained from std::async has temporary object lifetime (not moved or bound to a variable), the destructor of the std::future will block at the end of the full expression until the asynchronous operation completes

关于c++ - C++ 11 触发异步任务并忘记它的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23454793/

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