2016-08-31 14 views
0

同じ信号に接続された2つのQtスロットがあります。Qt-明示的にスレッドを実装せずに2つのスロットを同時に実行する方法

明示的にQtマルチスレッドを使用せずにそれらを並列に実行する必要があります。

Qtが暗黙のうちにそれを行う解決策を提供したかどうかを調べましたが、私は見つけられませんでした。

Qtでこれを行うには解決策はありますか?

+0

パラレル=マルチスレッド。マルチスレッドがない場合は、並行して処理することはできません。 – Hayt

+0

不明瞭なものとして閉じるように投票しました。パラレルで実行せずにパラレルで実行しますか?さらに、_with_スレッドであっても、実際に並行して実行することは保証できません。シングルスレッドCPUを使用している場合、またはOSがプログラムに単一のコアのみを割り当てる場合はどうなりますか? – MSalters

+0

@MSalters:あなたは完全な答えを書くことができます。私はそれに目を向けると、それをupvoteします。この問題は、多くのQtユーザーが直面する可能性があります。 – ProEns08

答えて

4

あなたはslot()にあなたの信号を接続して、あなたが同時モジュールを使用するために必要なすべての作業

#include <QtConcurrent> 
#include <QFuture> 
... 
void MyClass::slot() 
{ 
    QFuture <void> future1, future2; 
    future1 = QtConcurrent::run(this,&MyClass::slot1); 
    future2 = QtConcurrent::run(this,&MyClass::slot2); 
    future1.waitForFinished(); 
    future2.waitForFinished(); 
} 

を行うためにQtConurrentを使用する必要があります。 .proファイルに、次のように追加します。

QT += concurrent 
+1

バリエーション:ちょうど2つのスロットと、 'slot1'の先頭に' slot2'という1つの 'QtConcurrent :: run'呼び出しがあります。それから 'slot1'の通常の作業を行い、' slot1'の最後に 'slot2'の将来に' waitForFinished'を呼び出します。 – MSalters

関連する問題