dan*_*jar 21 c++ multithreading asynchronous std c++11
在我的图形应用程序中,我想在另一个线程中生成批处理网格.因此我异步调用成员函数使用std::async
.
task = async(launch::async, &Class::Meshing, this, Data(...));
Run Code Online (Sandbox Code Playgroud)
在我的更新循环中,我尝试检查线程是否准备好.如果是,我会将网格发送到视频卡并启动下一个线程.如果没有,我将跳过这些操作.
#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)
{
// ...
}
};
Run Code Online (Sandbox Code Playgroud)
如何在不更新功能的情况下检查异步线程是否完成?
let*_*tar 19
使用future::wait_for()
.您可以指定超时,然后获取状态代码.
task.wait_for(std::chrono::seconds(1));
Run Code Online (Sandbox Code Playgroud)
这将返回future_status::ready
,future_status::deferred
或者future_status::timeout
,因此您知道操作的状态.您还可以指定超时0,以便尽快立即返回检查.