Асинхронное выполнение функции

237
22 февраля 2018, 14:46

Функция, которая принимает параметры:

void log(string q, bool w) {
    mutex.lock();
    cout <<
    ...
}

Эта функция постоянно вызывается из разных потоков. Как выполнить вызов асинхронно? Пытался сделать через

std::async(&log, q, true);

но как-то не заладилось..

Answer 1

Пока вы не сохраните значение в фьючерсе, 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.

READ ALSO
вектор классов - обращение

вектор классов - обращение

Есть класс, есть вектор векторов этого классаКак обратиться к элементу класса через вектор векторов?

215
Попытка отсортировать массив

Попытка отсортировать массив

Неиспользуемые переменные

193
Записать рекуррентную формулу иначе C++

Записать рекуррентную формулу иначе C++

Проблема в том что при вычислении не хватает памяти и считает только до 7 символов после запятой, нужно чтобы считало хотя бы 10 символов после

228
Запуск окна wxWidgets в DLL с потока

Запуск окна wxWidgets в DLL с потока

Как осуществить запуск окна с нового потока?

312