この作品を作るために、私が知っているすべてを組み合わせようとしました。現在の構造でデッドロックやその他のスレッドの問題は発生しないと思います。ただし、いくつかの部分が欠落しており、利用可能なドキュメントは役に立ちません (私は C++ ドキュメントの経験がありません)。
int main()
{
QVector<double> vector_of_doubles(5);
qFill(vector_of_doubles.begin(), vector_of_doubles.end(), 1);
QList< QVector<double> > list_of_vectors;
list_of_vectors.append(vector_of_doubles);
list_of_vectors.append(vector_of_doubles);
list_of_vectors.append(vector_of_doubles);
QFuture< QVector<double> > res;
res = QtConcurrent::mappedReduced(list_of_vectors, Map(), Reduce());
res.waitForFinished();
qDebug()<<res.result();
return 0
}
QVector<double> Reduce(QVector<double> vector)
// Here the vectors get combined into one big vector....but how?
{
....
return big_vector;
}
QVector<double> Map(QVector<double> vector)
{
for (int i = 0; i < vector.size(); i++)
{
vector[i] = vector[i] + i;
}
return vector;
}
すべてが 1 の 3 つのベクトルを保持する QList の入力から、すべてのベクトルがいくつかの反復変数を追加した 1 つのベクトルに入りたいと思います。結果として、次のことが期待qDebug()
できます。
{1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4 ,5}
ここで、私が不足していると思われるものは次のとおりです。
- についてはどうですか
QtConcurrent:mappedReduced()
、正しい引数を与えていますか? - 関数の戻り値についてはどうですか、これらをどのように整理する必要がありますか?
- 正確に何を含める必要がありますか? QtConcurrent を含めるだけでよいですか?
- これが機能し始めると、QtConcurrentがスレッド管理を行い(利用可能なコアを使用する)、リストのすべてのアイテム(サイズが同じでなくても)がスマートに渡されることを理解している限り、リストは巨大になります。スレッドをアイドル状態にしないようにしますか?
編集 (ボタンのクリックで発生するのは問題でしょうか?):
私の例では機能していましたが、これを使用すると何が問題になる可能性がありますか:
チョークオン:res = QtConcurrent::mappedReduced(holder, correlate, Reduce, QtConcurrent::SequentialReduce);
変数:QList< QVector<double> > holder;
関連する機能:
QVector<double> correlate(QVector<double> &var1);
と
void Reduce(QVector<double> &reduceResult, const QVector<double> &partial)`
エラー: 呼び出しに一致する関数がありません'mappedReduced(QList<QVector<double> >&, <unresolved overloaded function type>, <unresolved overloaded function type>, QtConcurrent::ReduceOption)'
また、「テンプレート パラメーター ResultType を推測できませんでした」
コンソールアプリで動くものと同じです。