Здравствуйте, rus blood, Вы писали:
RB>Здравствуйте, RealBobEx, Вы писали:
RB>Векто съезжает из-за того, что при добавлении айтемов в вектор тот может производит реаллокацию своего буфера. При этом полученные ранее итераторы становятся невалидными.
RB>У тебя один поток добавляет айтем, другой — использует итератор, который после добавления становится невалидным.
Хммм... В таком случае должно помогать простое обновление значений итераторов, например так:
singleLock.Lock();
I = m_Vector.begin();
End = m_Vector.end();
singleLock.Unlock();
long i = 0;
for(I; I < End; )
{
singleLock.Lock();
//Используем I, т.к. теперь он валидный.
i++;
I++;
End = m_Vector.end();
singleLock.Unlock();
}
Однако это помогает только не выйти за верхнюю границу, но правильные значения все равно не получаются.