Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在另一个线程中使用线程向量:尝试引用已删除函数时出错_C++_Multithreading_C++11_Stl_Stdthread - Fatal编程技术网

C++ 在另一个线程中使用线程向量:尝试引用已删除函数时出错

C++ 在另一个线程中使用线程向量:尝试引用已删除函数时出错,c++,multithreading,c++11,stl,stdthread,C++,Multithreading,C++11,Stl,Stdthread,我试图向另一个线程函数的参数发送一个向量: void foo(){} const int n = 24; void Thread_Joiner(std::vector<thread>& t,int threadNumber) { //some code } int main() { std::vector<thread> threads(n, thread(foo)); thread Control_thread1(Thread_Joine

我试图向另一个线程函数的参数发送一个向量:

void foo(){}
const int n = 24;
void Thread_Joiner(std::vector<thread>& t,int threadNumber)
{
    //some code
}
int main()
{
    std::vector<thread> threads(n, thread(foo));
    thread Control_thread1(Thread_Joiner, threads, 0);//error
    thread Control_thread2(Thread_Joiner, threads, 1);//error
    //...
}
我检查了
std::thread
的头文件,似乎复制构造函数被删除了:
thread(constthread&)=delete

std::thread
有一个move构造函数,但我不认为在这种情况下使用move是有帮助的,因为
Control\u thread1
Control\u thread2
使用相同的
vector

如果我使用
thread**threads
而不是
向量
它工作正常,但我不想使用指针


我该怎么办

std::thread
复制用于绑定的参数。使用
std::ref
将其作为参考:

std::thread Control_thread1(Thread_Joiner, std::ref(threads), 0);
std::thread Control_thread2(Thread_Joiner, std::ref(threads), 1);

@向量的构造函数xyz也在尝试复制
thread(foo)
对象。这就是我该如何解决的问题?!使用
vector
?@xyz是的,但最好使用智能指针:
std::vector线程(n,std::make_shared(foo))
。如果您不打算将向量扩展到其声明的大小之外,请使用
std::array
@xyz实际上您只需要
std::vector线程;对于(自动&th:threads)th=std::thread(foo)
@xyz我知道,但我建议使用
shared\u ptr
是错误的,因为它在没有密码的情况下运行良好。
std::thread Control_thread1(Thread_Joiner, std::ref(threads), 0);
std::thread Control_thread2(Thread_Joiner, std::ref(threads), 1);