Здравствуйте, uzhas, Вы писали:
U>Здравствуйте, dosik, Вы писали:
U>я тут плохо понял каким образом потоки раздаются и как фьючерсы используются, но нельзя ли потоку при создании передать нечто (хоть ссылку на булевый флаг, хоть ивент), за что можно дернуть при завершении, чтобы потоки вышли бы без терминации?
Про фьючерсы — в карту складываются ожидаемые события по связке: id события — обещание (promise). Карта заполняется основным потоком. Как только "ловится" событие с этим id, в соответствующее обещание записывается значение, что и генерит фьючерс. Вот такие вот кастыли, чтобы создать некую асинхронность на базе блокирующей функции.
А потоки именно так и крутяться:
std::atomic<bool> iswork;
...
void threadfunc(){
while (iswork.load()){
...
resulttype result = waitsomeevent(params ...);
...
}
}
И как только "пора заканчивать", iswork устанавливается в false. Только что толку, если цикл блокируется в waitsomeevent?
И как я уже сказал, самому сгенерит событие нельзя.
U>это очень плохая практика
Для начала — это очень плохая библиотека. Но обещают доработать.
А так конечно согласен, но думаю наверху проблему описал более подробно.