Qtを使用して大規模な最適化ツールを開発しています。私はQThreadsを使用してより良いCPU使用率を得るために。次に、ワーカーオブジェクト(非QObjectデータメンバーを含むQObjectから派生)をスレッドに移動します。 GCCとQtを使ってLinux上でうまくいっていて、スムーズに動作します。4.8Q WindowsでMinGwを使用するスレッドが正しく動作しない
WindowsではQt 5.5を使用してMinGwを使用すると、計算時間が大幅に短縮されました。スレッドは計算のどこかでブロックされており、シリアル化されているようです。スレッドが正しく動作していることを確認するために、いくつかのデバッグメッセージを表示しました。 Windowsには存在するが、Linuxでは存在しないボトルネックがあるようです。私は、Qtバージョンが違いを生むとは思わない、私はむしろ問題がMinGwによって引き起こされたと思うだろう。 OSはWindows 7とDebianです。 Qt5のコンパイルされたMinGwバイナリを使用します。
MinGwのQtビルドに必要な設定はありますか?または、ワーカーオブジェクトをスレッドに移動するときに、非QObjectメンバーを使用する際に問題がありますか?これは、QThreadが内部で使用するさまざまなスレッドの種類に問題がありますか?始動はスレッドがこのようになりますOB
:
EDIT :-)事前にありがとうございます。
for (int i = 0; i < this->numberOfCores; i++)
{
QThread *thread = new QThread(this);
thread->setObjectName("Thread " + QString::number(i));
Calculator *calculator = new Calculator(/* Skip parameters */);
calculator->moveToThread(thread);
connect(calculator, SIGNAL(debugInfo(DebugData)), this, SIGNAL(debugInfo(DebugData)));
connect(this, SIGNAL(startCalculator()),
calculator, SLOT(startCalculation()));
connect(calculator, SIGNAL(solutionFound(Solution*)),
this, SLOT(addSolution(Solution*)));
connect(calculator, SIGNAL(calculationFinished()), this, SLOT(calculatorFinished()));
thread->start(QThread::HighestPriority);
私はこのアプローチを複数回使用していましたが、それは常に有効でした。
Calculatorは、ソリューションを計算するだけです。各カレンダーには独自のデータがあり、競合条件はありません。それらはすべて完全に異なるデータで動作します。
表示されていないコードに問題がある可能性があります。 – dtech
同じマシンで実行していますか?別のOSですか? – thuga
@thuga同じ物理マシンDebianを使った仮想マシン – Liachtei