У меня есть массив потоков и в цикле for
Я должен создать поток для всех из них.Возьмите несколько аргументов функции потока C++ 11
Проблема в том, что один из параметров: std::move(promise_var)
, а другой - структура. Когда я пытаюсь скомпилировать его компиляции дает мне ошибку:
error: no matching function for call to ‘
std::thread::thread(void (&)(Function), Structure [nNumThreads], std::remove_reference<std::promise<const char*>&>::type)
’
Итак, вот упрощенная версия кода ...
func(struct Structure, std::promise<const char *> && v_Promise){
//doing work
}
main(){
std::thread a_Threads[5];
for(int8_t i = 0; i < 5; i++){
a_Threads[i] = std::threads(func, Structure, std::move(v_promise[i]));
}
}
Я не уверен, что вы можете делать то, что хотите, но я не думаю, что хочу в любом случае. В цикле вы перемещаете один и тот же объект в каждый поток. После первой итерации 'v_promise' больше не будет использоваться, поскольку ее содержимое было перемещено в поток. – NathanOliver
Если 'func' принимает ссылку rvalue на' std :: prom', это означает, что он, вероятно, «переходит из« v_promise »и оставляет' v_promise' в неуказанном, возможно непригодном состоянии. Как каждый поток может использовать один и тот же объект в этом случае? Либо создайте 5 'v_promise', либо используйте ссылку lvalue. – KABoissonneault
. Конечно, вы можете использовать многопоточные функции потоковой передачи. Однако в коде есть проблема, упомянутая выше, и она не является полной в любом случае. – SergeyA