1 std::thread传入引用值需要使用std::ref
std::ref的说明: Constructs an object of the appropriate reference_wrapper type to hold a reference to elem.
其实主要是,如果要向thread传参的时候,该参数在线程内会被修改,需要用这个ref作为一个wrapper将对象包裹成为一个引用然后传入。
void main() {
while(1){
...<省略>...
if (!initializedFlag) {
initializedFlag = true;
// viewThd = new std::thread(viewThread, camVecToDraw); // wrong way
viewThd = new std::thread(viewThread, std::ref(camVecToDraw)); // right way
}
...<省略>...
addCamToDrawVec(imgData.image, camVecToDraw);
camVecToDraw;
}
viewThd.join();
delete viewThd;
viewThd = nullptr;
}
void viewThread(std::vector<pangolin::OpenGlMatrix>& camVecToDraw) {
while(!shallQuit()) {
// render some cameras according to camVecToDraw
...<省略>...
}
}
C++线程安全:使用std::ref传递引用参数

本文介绍了在C++中使用std::thread时,如何通过std::ref正确传递引用参数,确保线程内的变量修改能够同步到主线程。示例代码展示了在初始化标志改变时,启动线程更新向量camVecToDraw,并在视图线程中根据该向量渲染相机。通过std::ref避免了传值导致的副本问题,实现了线程间的数据共享。
9257

被折叠的 条评论
为什么被折叠?



