gpt4 book ai didi

c++ - 如何检查 std::async 任务是否完成?

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

在我的图形应用程序中,我想在另一个线程中生成批处理网格。因此我使用 std::async 异步调用成员函数。

task = async(launch::async, &Class::Meshing, this, Data(...));

在我的更新循环中,我尝试检查线程是否准备好。如果是,我会将网格发送到视频卡并开始下一个线程。如果没有,我将跳过这些操作。

#include <future>
using namespace std;

class Class
{
public:
void Update()
{
if(task.finished()) // this method does not exist
{
Data data = task.get();
// ...
task = async(launch::async, &Class::Meshing, this, Data(/* ... */));
}
}

private:
struct Data
{
// ...
};
future<Data> task;
Data Meshing(Data data)
{
// ...
}
};

如何检查异步线程是否完成而不卡在更新函数中?

最佳答案

使用 future::wait_for() .你可以指定一个超时时间,然后得到一个状态码。

示例:

task.wait_for(std::chrono::seconds(1));

这将返回 future_status::readyfuture_status::deferredfuture_status::timeout,以便您了解操作的状态。您还可以将超时时间指定为 0 以使检查尽快返回 立即

关于c++ - 如何检查 std::async 任务是否完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14287127/

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