在我的图形应用程序中,我希望在另一个线程中生成一批网格。因此,我使用 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)
{
// ...
}
};
我该如何检查异步线程是否已经完成而不会在更新函数中卡住?
std::future::wait_for
,并使用您可以管理的最小持续时间。 - GManNickGwhen_any
和when_all
。 - ronag