В настоящее время у меня проблемы с передачей QVector между потоками. На данный момент у меня есть основной поток (GUI-Thread) и рабочий поток, который часто генерирует массивы QVector. Непосредственно перед выбросом данных внутри вектор хорошо смотрится. Получатель - это слот в основном потоке, но данные, полученные слотом, искажены.
Вот некоторые части моего кода:
Выдать в рабочем потоке:
void Pipeline::process
{
QVector<float> buffer(w * h * d);
// filling the vector with RGB-Values
emit this->pushBuffer(buffer, w, h, d);
}
Подключение сигнала и слота в основном потоке:
QObject::connect(this->_pipeline.data(), SIGNAL(pushBuffer(const QVector<float>, int, int, int)), this->ui->widgetFiltered, SLOT(setBuffer(const QVector<float>,int,int,int)));
Слот в основном потоке:
void GLWidget::setBuffer(const QVector<float> buffer, int dataSizeX, int dataSizeY, int dataSizeZ)
{
// at this point the contents inside 'buffer' is garbled
}
Поток запускается с помощью moveToThread QObject и QVector<float>
, зарегистрированного в мета-системе с помощью qRegisterMetaType< QVector<float> >("QVector<float>");
в основном методе.
Возможно ли, что данные будут потеряны после возврата Pipeline::process
? Я не уверен, как неявное совместное использование внутри QVector
ведет себя в этом многопоточном случае.
Любая помощь будет оценена.
Привет
Волк