@PDCherkasova

Как реализовать сопроцедуру которая принимает каталог, и перечисляет асинхронно его элементы?

Функция ниже асинхронно получает указатель на следующий элемент каталога. Сопроцедура должна вызывать ее пока не закончатся элементы в каталоге. Для элементов директорий сопроцедура вызывает сама себя.
Не знаю с чего начать, поэтому помогли бы похожие примеры или алгоритм, как такие вещи реализуются.

decltype (auto) async_next(async_dir_iter dir, CompletionToken&& token)
{
    boost::asio::async_completion<CompletionToken,void (fs::directory_iterator)> init{token};
    auto& pool = get_default_thread_pool();

    auto wg1 = boost::asio::make_work_guard(init.completion_handler);
    auto wg2 = boost::asio::make_work_guard(pool);

    auto alloc = boost::asio::get_associated_allocator(init.completion_handler);

    pool.get_executor().post([dir = std::move(dir), h=std::move(init.completion_handler),  wg1=std::move(wg1), wg2=std::move(wg2)]() mutable {

        struct dirent* entry = readdir(dir.get_start());
        entry_info res(entry, dir.get_path());
        auto ex = wg1.get_executor();
        auto alloc = boost::asio::get_associated_allocator(h);

        ex.dispatch([h = std::move(h), wg1 = std::move(wg1), wg2 = std::move(wg2), res]() mutable {
            wg1.reset();
            wg2.reset();
            std::move(h)(res);
        },alloc);
    },alloc);
    return init.result.get();
}
  • Вопрос задан
  • 45 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы