std::thread class 方法错误
std::thread class method errors
我正在尝试在基于网格的地形上逐行创建线程 运行(我不是问这是否有效,我只是在测试一些东西)但我不断遇到 2 个错误:
首先是如果我不将函数作为
&DJM::Terrain:GenBlocks
编译器告诉我在开头附加 & 但是当我使用引用时它给我一个连接到 xmemory
的单独错误
error C2248: 'std::thread::thread' : cannot access private member declared in class 'std::thread'
1> d:\program files\visual studio 2012\vc\include\thread(73) : see declaration of 'std::thread::thread'
1> d:\program files\visual studio 2012\vc\include\thread(32) : see declaration of 'std::thread'
我真的不明白为什么。我在多个地方读到过,您应该将 this 作为第二个参数,但这给出了与上面完全相同的错误。我也尝试过将 i 作为 std::ref 传递,但这会产生相同的错误。
for(size_t i = 0; i < mHEIGHT; ++i){
std::thread t(&DJM::Terrain::GenBlocks, &i);
mThreads.push_back(t);
}
for(std::vector<std::thread>::iterator iter = mThreads.begin(); iter != mThreads.end(); iter++){
iter->join();
}
相当大的代码文件,所以我宁愿不 post 整个 class,但如果我 posted 的代码没有直接错误,我' d 很高兴 post 剩下的代码。注意mThreads是作为成员变量存储的
std::thread
s 无法复制。将其移动到向量中:
mThreads.push_back(std::move(t));
我正在尝试在基于网格的地形上逐行创建线程 运行(我不是问这是否有效,我只是在测试一些东西)但我不断遇到 2 个错误:
首先是如果我不将函数作为
&DJM::Terrain:GenBlocks
编译器告诉我在开头附加 & 但是当我使用引用时它给我一个连接到 xmemory
的单独错误error C2248: 'std::thread::thread' : cannot access private member declared in class 'std::thread'
1> d:\program files\visual studio 2012\vc\include\thread(73) : see declaration of 'std::thread::thread'
1> d:\program files\visual studio 2012\vc\include\thread(32) : see declaration of 'std::thread'
我真的不明白为什么。我在多个地方读到过,您应该将 this 作为第二个参数,但这给出了与上面完全相同的错误。我也尝试过将 i 作为 std::ref 传递,但这会产生相同的错误。
for(size_t i = 0; i < mHEIGHT; ++i){
std::thread t(&DJM::Terrain::GenBlocks, &i);
mThreads.push_back(t);
}
for(std::vector<std::thread>::iterator iter = mThreads.begin(); iter != mThreads.end(); iter++){
iter->join();
}
相当大的代码文件,所以我宁愿不 post 整个 class,但如果我 posted 的代码没有直接错误,我' d 很高兴 post 剩下的代码。注意mThreads是作为成员变量存储的
std::thread
s 无法复制。将其移动到向量中:
mThreads.push_back(std::move(t));