現在、スレッド間でQVectorを渡す際に問題が発生しています。現在、メインスレッド(GUIスレッド)と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
}
スレッドはQObjectのmoveToThreadを使用して開始され、mainメソッドでQVector<float>
メタシステムに登録されます。qRegisterMetaType< QVector<float> >("QVector<float>");
Pipeline::process
返品後にデータが失われる可能性はありますか?QVector
このマルチスレッドの場合、内部の暗黙的な共有がどのように動作するかはわかりません。
どんな助けでもいただければ幸いです。
ご挨拶
狼