1

スレッドでランダムなポイント (ランダムな座標) を生成する同じ関数を数回呼び出すためのベスト プラクティスを知りたいです。実際、この関数の並列化された呼び出し、たとえば randomPoint() を既に実装しています。ここで、呼び出しごとにスレッドを作成するのではなく、使用可能なスレッドの数だけ計算を実行することで改善されるかどうかを試してみたいと思います。計算します

QThreadPool pool;
int freeThreads_ = pool.maxThreadCount();

int iterPerThread_ = ((N-m)%freeThreads_ ==0) ? (N-m)/freeThreads_ : (N-m)/(freeThreads_-1) ;

私にとっては、8 つのスレッドが利用可能です。実行する同様の計算が2000あります。したがって、スレッドごとに 2000/8 の計算で 8 つのスレッドを実行したいと考えています。

しかし、QtConcurrent 呼び出しを実装する最善の方法がわかりません。とりあえず書きます

QFuture<double**> futurRand_ = QtConcurrent::run(randomPoint(),m_lower,m_upper);

そして futurRand_.result(); メソッド randomPoint() を適応させ、最初は単一のポイント (double*) を返すようにして、2000/8 ポイントのセットである double** を返すことができるようにしました。

しかし、私は QConcurent::map() で代替を見ました。より効率的な方法はありますか?QThreadで?

Qt でのマルチスレッドの経験は大歓迎です!

よろしく。

-- 編集: より正確にするために: マップには署名があります

 QFuture<void> QtConcurrent::map ( Sequence & sequence, MapFunction function )

または、その引数の 1 つとしてイテレータを取ります。ただし、ここでは、同じインスタンスで毎回呼び出される関数thisを呼び出します。どうやって進める?他に便利な方法はありますか?

4

0 に答える 0