@Blunker

Как передать аргумент в поток C++ Thread?

В POSIX Thread есть функция pthread_create, в нее передается указатель на функцию и аргументы этой функции.
А как подобное происходит в C++ Thread?
У меня есть вектор
vector<thread> threads;

Нужно передать в цикле функцию и параметры, примерно так:
for (int i = 0; i < NUM_THREAD; i++)
{
        threads.push_back(std::thread(func, (void*)param));
}


Но почему-то компилятор ругается на этот код:(
  • Вопрос задан
  • 6528 просмотров
Решения вопроса 1
kozura
@kozura
std::vector<std::thread> thread_pool;

void foo(int i) {
	// do...
}

int main() {
	thread_pool.push_back(std::thread(foo, 5));

	return 0;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
dnovikoff
@dnovikoff
Тред можно создать и так

std::thread([] {
// your code here
});

И даже так

std::thread([param] { // захват по значению
foo(param);
});
Ответ написан
Комментировать
Nipheris
@Nipheris Куратор тега C++
Типы параметров, отдаваемых конструктору std::thread должны быть совместимыми с типами параметров, которые принимает функция func. Кроме того, возможно проблема не в параметре, а в попытке копирования std::thread в вектор (попробуйте обернуть в std::move). Вам стоит самому посмотреть и написать сюда, как конкретно ругается компилятор.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы