Подтвердить что ты не робот

Как проверить, завершена ли задача 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)
    {
        // ...
    }
};

Как проверить, завершился ли поток асинхронизации без использования функции обновления?

4b9b3361

Ответ 1

Используйте future::wait_for(). Вы можете указать тайм-аут и после этого получить код состояния.

Пример:

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

Это вернет future_status::ready, future_status::deferred или future_status::timeout, чтобы вы знали статус операции. Вы также можете указать тайм-аут 0, чтобы как можно скорее вернуть return .