2012-12-29 9 views
22

信号の変化がスロットに通知されているとします。変更信号が発行された場合、通知スロットが実行を開始します。Qt信号とスロットのスレッドの安全性

第2の変更信号が発行され、最初の通知スロットの実行が完了しなかった場合はどうなりますか?

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

答えて

29

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