#c #multithreading #function #return #pthreads
#c #многопоточность #функция #Возврат #pthreads
Вопрос:
Я пытаюсь передать указатель, полученный от функции-члена класса, другой функции-члену того же класса, используя thread и ожидая возвращаемое значение.
class tictactoe
{
...
..
.
};
class AI {
public:
int pickSpot(tictactoe* game){
t = new thread([this]() {findOptions(game);} );
return 0;
}
int findOptions(tictactoe* game){ return 0;}
};
приводит к ошибке:
ошибка: переменная ‘game’ не может быть неявно записана в лямбда-выражении без указания захвата по умолчанию
как это делается?
Комментарии:
1.
[this]
->[this, game]
2. спасибо, одна проблема устранена.
3. или : t = новый поток([this]( auto game_arg ) { findOptions( game_arg ); } ,игра);
Ответ №1:
Чтобы получить возвращаемое значение, вы можете использовать std::future и std::async:
#include <future>
#include <thread>
int pickSpot(tictactoe* game){
std::future<int> f = std::async(std::launch::async, [this, game]() { return findOptions(game); });
f.wait();
int res = f.get();
return res;
}
Комментарии:
1. спасибо, но … ошибка: нет жизнеспособного преобразования из ‘future<__async_result_of<(lambda at /TICTACTOE/main.cpp: 268:61)>>’ в ‘future<int>’
2. /usr/include/c /9/future:779: конструктор-кандидат нежизнеспособен: неизвестно преобразование из ‘future<__async_result_of<(lambda at /TICTACTOE/main.cpp: 268:61)> >’ (он же ‘future<void>’) в ‘std::future<int> amp;amp;’ для 1-го аргумента