Функция, которая принимает параметры:
void log(string q, bool w) {
mutex.lock();
cout <<
...
}
Эта функция постоянно вызывается из разных потоков. Как выполнить вызов асинхронно? Пытался сделать через
std::async(&log, q, true);
но как-то не заладилось..
Пока вы не сохраните значение в фьючерсе, async не будет выполняться параллельно.
Простейший пример:
void sss(int x)
{
for(int i = 0; i < 1000; ++i, Sleep(1))
cout << x;
cout << endl;
}
int main(int argc, const char * argv[])
{
/* auto g = */ async(sss,1);
auto f = async(sss,2);
f.get();
}
Если вы оставите все, как есть - сначала будут выведены единички, только потом - двойки. А если раскомментарите - пойдут параллельно.
Дело в том, что фактически вы при вызове async без присваивания убиваете возвращаемый фьючерс, что приводит к ожиданию завершения параллельного потока.
Если вас не очень интересует результат - это тот случай, когда лучше подойдет thread + detach.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости