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