26

スロット通知に接続された信号の変更があるとしましょう。changeシグナルが発行されると、notify スロットの実行が開始されます。

2 番目の変更シグナルが発行され、最初の通知スロットの実行が完了していない場合はどうなるでしょうか。

2 番目のスロットは最初のスロットと同時に起動されますか? もしそうなら、Qtはスレッドセーフを処理していますか、それともプログラマーが処理するのですか?

4

1 に答える 1

37

関数の呼び出しで指定した接続タイプによって異なりますconnectQt::DirectConnectionスロットが同時に起動される唯一の方法は、スロットのスレッドとは異なるスレッドで信号をAND送信するように指定した場合です。接続タイプを省略すると、になりますQt::AutoConnection。この場合、あるスレッドからシグナルを送信し、それを別のスレッドでキャッチすると(たとえば、メインGUIスレッドで)-Qtはスロットの呼び出しをメッセージキューに入れ、すべての呼び出しを順番に行います。詳細についてはこちらをお読みください-http: //qt-project.org/doc/qt-4.8/threads-qobject.html#signals-and-slots-across-threads

于 2012-12-29T10:06:22.457 に答える