170 похожих чатов

Ребят, а как правильно сделать очередь из future? Чтобы одновременно было

не более k.

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

Приходит на мысль scoped счётчик, который создаётся внутри future, увеличивает переменную при создании, и уменьшается при выходе. А в точке создания будет активное ожидание на нём, но есть ли что-то получше/попроще?

21 ответов

4 просмотра

std::async

Gleb-Pylypets Автор вопроса
Ilya Zviagin
std::async

Ну я и делаю сейчас 1. for loop(k) futures[i] = std::async(...) 2. for loop(k) futures[i].get() Но проблема в том, что хочу постоянно делать по k задач, а не порциями/

Вызывай функцию внутри future, которая будет создавать новый future

Gleb-Pylypets Автор вопроса
Danya🔥
Вызывай функцию внутри future, которая будет созда...

Ну тут будет проблема с unhandled exception, так как future может не создастся. Но можно попробовать...

Gleb-Pylypets Автор вопроса
Artöm Bakri Al-Sarmini
Может тебе тредпул нужен?

Возможно, но не хочу добавлять ещё сторонние либы в проект - хочу средствами стандарта С++.

Gleb Pylypets
Ну я и делаю сейчас 1. for loop(k) futures[i] = s...

Делай очередь задач к каждой future

Gleb Pylypets
Возможно, но не хочу добавлять ещё сторонние либы ...

Средства стандарта C++ в этом месте такие, что лучше не трогать вообще

Sergey Skvortsov
Средства стандарта C++ в этом месте такие, что луч...

Нормальные средства стандарта, их хватит

Gleb Pylypets
Возможно, но не хочу добавлять ещё сторонние либы ...

>но не хочу добавлять ещё сторонние либы в проект а в чём причина?

Ilya Zviagin
Нормальные средства стандарта, их хватит

дядь, мы точно про один и тот же С++ говорим?

Gleb-Pylypets Автор вопроса
Alexander "SonnySlave" Zaitsev
>но не хочу добавлять ещё сторонние либы в проект ...

Я испольузю plog, json, cpr, последняя возвращает std::future для асинхронных запросов, не хочу сюда буст подтягивать для тредпула - кажется, излишним.

Alexander "SonnySlave" Zaitsev
дядь, мы точно про один и тот же С++ говорим?

Точно. На стандартном c++11 пулы потоков с заданиями вполне можно сделать

Gleb-Pylypets Автор вопроса
Ilya Zviagin
Делай очередь задач к каждой future

У каждого future очередь с задач? Хм, ну можно и так попробовать, но не лучше ли сделать тогда потоки вместо future?

Ilya Zviagin
Точно. На стандартном c++11 пулы потоков с задания...

а зачем делать самому, если можно взять готовый?

Gleb Pylypets
Я испольузю plog, json, cpr, последняя возвращает ...

ну можно не обязательно буст. какие-то там тредпулы есть ещё и в условном POCO (качество либы оставим за кадром). Для тредпулов "на стероидах" можешь посмотреть в SObjectizer

Gleb-Pylypets Автор вопроса
Ilya Zviagin
Делай очередь задач к каждой future

Проблема в том, что очередь может быть пустой для какого-то потока, и он завершит свою работу. А затем из другого потока туда добавяться эллементы. Нужно, чтобы либо потоки были всё время в ожидании, то есть городить целый тредпул, либо создание future динамически после завершения. Последнее я пытаюсь реализовать Даже если очереди будут разные для каждой future, то им нужно будет ожидать на пустых иногда, то есть это нужно делать тредпул.

Gleb-Pylypets Автор вопроса
Artöm Bakri Al-Sarmini
Может тебе тредпул нужен?

Проблема тредпула в том, что не понятно, когда задачи завершаться. Очередь может оказаться пустой, но задачи будут на выполнении, а потом снова добавяться эллементы в очередь, и это нужно хендлить. Если я буду ожидать на окончании всех задач в тредпуле, то это превратиться в выполнение порциями, а не парально. Если же буду на одной из, то в конце не смогу захендлить ожидание на всех, так как утерян будет статус работы...

Gleb-Pylypets Автор вопроса
Gleb Pylypets
Проблема тредпула в том, что не понятно, когда зад...

Тредпул удобный, когда есть какой-то сервер, что раниться грубо говоря while(true), но это не мой случай.

Gleb Pylypets
Проблема тредпула в том, что не понятно, когда зад...

Трэдпул стартует и завершает работу вместе приложением

https://github.com/heathkh/taskqueue

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта