2012-02-14 14 views
2

私はforループを使用します。これは入力に応じて通常100〜300の範囲で固定回数実行されます。このループのすべての繰り返しは、スレッド化したい関数を呼び出します。Qtで関数をスレッディング

void myClass::processFile() 
{ 
    ... 

    for (int index = 0; index < 200; index++) 
    { 
     //Function or loop to thread 
     generateData(someMapOfMaps1[index], someMapOfMaps2[index]); 
    } 
} 
:ここでは、入力ファイルからのグラブのデータをスレッドに機能、それにいくつかのものを行い、その後、出力ファイルに新しい形式で書き出す...

は、いくつかの高レベルのコードであります

その後同じクラス内generateData内側:私はQtConcurrent::run()QtConcurrent::mapped()で遊んが、はるかリットルを持っていなかった

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 
} 

あなた。私はmapped()がすばらしい選択だったと信じていますが、私の関数はただ1つではなく2つのマップを取ります。 http://www.develer.com/promo/workshop/enhancing_with_multi_threading.pdf

ありがとう:スライド25の周り

私は、資源としてこれを使用していた

答えて

1
  • あなたforサイクルでこのhttp://developer.qt.nokia.com/doc/qt-4.8/qwaitcondition.html
  • コールgenerateData前QWaitConditionによって無限ループであなたの関数のrun()呼び出し
  • 停止ループにQThread
  • プットからクラスを継承ウェイクアップの条件を読んで
0

opファイル、読み書きのファイル、 'some stuff'、スレッドの多くループごとに1つの関数呼び出しをスレッド外ししようとすると、あまりにも多くの回避可能なスレッド間通信しかできません。 filespecsなどをmyClassオブジェクトにパックし、スレッドに通知して、それをそのまま放してください。