Я хочу вызвать метод (для этого примера конструктор std :: thread)
с лямбда-функцией, передавая значение int:
int a=10;
std::thread _testThread = thread([a](int _a){
//do stuff using a or _a ?
});
_testThread.detach();
Я не знаю, как правильно написать такую функцию, я получаю эту ошибку:
C2064: термин не оценивает функцию, принимающую 0 аргументов
std::thread
принимает вызываемый объект, а также любые аргументы для передачи ему. Если вы не дадите никаких аргументов, std::thread
будет пытаться вызвать этот объект без аргументов, следовательно, ошибка.
Если вам нужен параметр:
std::thread _testThread{[a](int _a) {
std::cout << a << ' ' << _a; //prints main's a, followed by somethingThatWillBe_a
}, somethingThatWillBe_a};
Если вы просто пытаетесь использовать main
«s a
Захвачено:
std::thread _testThread{[a] {
std::cout << a; //prints main's a
}};
Я также рекомендовал бы быть очень осторожным, если вы думаете, что вам нужно отсоединить нить. Если есть возможность присоединиться к потоку вместо этого, пойти на это.
Вы можете получить доступ int a
одним из двух способов. Либо передайте его в качестве параметра конструктору потока, либо перехватите его в закрытии лямбды:
int a=10;
// pass in a as a parameter
std::thread _testThread1([](int _a){
//do stuff using a or _a ?
}, a); // pass a to the parameter _a
_testThread1.detach();
// capture a in the closure
std::thread _testThread2([a](){ // capture a
//do stuff using a or _a ?
});
_testThread2.detach();
Если вы хотите передать значение лямбда-функции, посмотрите на мой код ниже:
int main()
{
int a = 10;
[](int arg)
{
cout << "arg = " << arg << endl;
}
(a);
return 0;
}
Если вы хотите создать поток с лямбда-функцией и передать ей несколько аргументов, смотрите следующий пример кода:
int main()
{
int a = 10;
thread thd([](int arg) { cout << "arg = " << arg << endl; }, a);
thd.join();
return 0;
}