2013-04-24 32 views
8

スレッドXのオブジェクトから2つのシグナルAとBが順番に送信され、2つの接続スロットがメインスレッドにあります。接続はQueuedConnection(マルチスレッド接続のため)です。私の質問は、スロットへの呼び出しで尊重される信号の順序、またはそれらが任意の順序で実行される可能性があることです。Qt :: QueuedConnectionによるシグナル実行順序

+0

私はいつもそれらが放出の順序で実行されたと考えました。なぜなら、それらは同じ優先順位で放出されるのでイベントキューにイベントとして追加されるからです。しかし、私はこれを確認するためのドキュメントを見つけることができないし、私はソースコードを見ていない... – cmannett85

答えて

6

シグナルは両方ともXスレッドの1つのイベントキューに入れられ、対応するスロットはシグナルが発行された順に実行されます。

しかし、あなたはスロットの実行順序に依存することはできません以下の場合:

signal A connected to a slot in X thread 
signal B connected to a slot in Y thread 

また、Qt::BlockingQueuedConnection接続タイプがあります。最初のシグナルを接続すると、別のスレッドの対応するスロットが終了するまで、現在のスレッドはブロックされます。

5

現在のQTソース(5. *)によれば、それらはFIFOアルゴリズムを使用して放射された順番でディスパッチされます。しかし、コメントに記載されているように、この順序を指定する文書には何もないので、私はその動作を中継することを提案しません。