Как проверить, завершена ли задача std:: async?
В моем графическом приложении я хочу создать пакетные ячейки в другом потоке. Поэтому я асинхронно вызываю функцию-член с помощью 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)
{
// ...
}
};
Как проверить, завершился ли поток асинхронизации без использования функции обновления?
Ответы
Ответ 1
Используйте future::wait_for()
. Вы можете указать тайм-аут и после этого получить код состояния.
Пример:
task.wait_for(std::chrono::seconds(1));
Это вернет future_status::ready
, future_status::deferred
или future_status::timeout
, чтобы вы знали статус операции. Вы также можете указать тайм-аут 0, чтобы как можно скорее вернуть return .