2

入力に応じて、通常は 100 ~ 300 の範囲で一定回数実行される for ループがあります。このループを繰り返すたびに、スレッド化したい関数が呼び出されます。スレッド化する関数は、入力ファイルからデータを取得し、それを処理してから、新しい形式で出力ファイルに書き出します...

ここにいくつかの高レベルのコードがあります:

void myClass::processFile()
{
    ...

    for (int index = 0; index < 200; index++)
    {
        //Function or loop to thread
        generateData(someMapOfMaps1[index], someMapOfMaps2[index]);
    }
}

次に、同じクラス内の generateData 内で:

void myClass::generateData(QMap<float, foo*> mapA, QMap<float, foo*> mapB)
{
    //read in data from a file
    //process data
    //write data to a different file
}

QtConcurrent::run()andで遊んでみましQtConcurrent::mapped()たが、あまり運がありませんでした。素晴らしい選択だったと思いますが、私mapped()の関数は 1 つではなく 2 つのマップを使用します。

スライド 25 あたりでこれをリソースとして使用していました: http://www.develer.com/promo/workshop/enhancing_with_multi_threading.pdf

ありがとう!

4

2 に答える 2

1
  • これを読んでくださいhttp://developer.qt.nokia.com/doc/qt-4.8/qwaitcondition.html
  • からクラスを継承しますQThread
  • run()関数の呼び出しを無限ループに入れる
  • QWaitConditiongenerateData を呼び出す前にループを停止
  • forあなたのサイクルの目覚めの状態
于 2012-02-14T22:02:18.167 に答える
0

ループ、ファイルの読み取り/書き込み、「いくつかのもの」、ロットをスレッドに入れます。ループごとに 1 つの関数呼び出しをスレッド化しようとするのは、まあ、あまりにも避けられないスレッド間通信です。filespecs などを myClass オブジェクトにパックし、それをスレッドに通知して、手放します...

于 2012-02-14T22:03:46.747 に答える