Если вы хотите изменить done1
в вашем потоке, лямбда должна брать bool
по ссылке, а done1
должен быть заключен в reference_wrapper
, когда вызывается ctor потока:
std::thread thread_1([this](vector<Point> points,bool& done) { // take by reference
for(int i = 0; i < total_points/3; i++) {
int id_old_cluster = points[i].getCluster();
//...
done = false;
}
}
},points, std::ref(done1) ); // <--- std::ref
Другой вариант - захватить done1
по ссылке, тогда лямбда принимает только один параметр:
[this,&done1](vector<Point> points) {
//...
done1 = true;
}, points);
Ваша лямбда изменяет вектор точек, но теперь это копия, поэтому переданный вектор не затрагивается, когда заканчивается поток.Тебе нужно также передать баллы по ссылке:
std::thread thread_1([this](vector<Point>& points,bool& done) { // both args by ref
for(int i = 0; i < total_points/3; i++) {
int id_old_cluster = points[i].getCluster();
//...
done = false;
}
}
}, std::ref(points), std::ref(done1) ); // <--- std::ref 2x