Что произойдет, если один и тот же сигнал и слот подключены дважды?
Как обрабатывается механизм?
Что произойдет, если один и тот же сигнал и слот подключены дважды?
Как обрабатывается механизм?
Несколько недель назад у нас был стажер, который случайно подключил сигнал к слоту более одного раза. Идея заключалась в том, что при одном условии у вас будет слот, подключенный к сигналу, и при другом условии вы его отключите. Когда вы изменили режим, вы выполните соответствующую работу.
Ну, он забыл отключиться, когда это уместно. Поэтому каждый раз, когда вы меняли режимы, у вас было новое соединение с слотом.
Конечный результат? 1 соединение == 1 вызов в слот. 2 соединения == 2 вызова в слот. 3 соединения == 3 вызова в слот и т.д. Эти вызовы произошли "одновременно" (я знаю, что в действительности они не были, поскольку они находятся в одном потоке событий, но я имею в виду, что все вызовы обрабатывались последовательно).
Как @Job указывает в одном из своих комментариев (он заслуживает доверия, поэтому, пожалуйста, не повышайте меня за свою работу), Qt::UniqueConnection
предотвратит эту проблему.
Обычно плохие вещи. Это вполне приемлемо для подключения слота два или даже больше раз, но когда сигнал будет запущен, ваш слот будет вызываться для каждого подключенного вами соединения, которое, вероятно, не является тем, что вы хотите.
Обратите внимание, что не обязательно неправильно иметь несколько соединений. Для него есть (возможно) совершенно правильные варианты использования. Они довольно редки, я, конечно, не могу думать о том, как я использовал его как функцию. Все ситуации, которые я могу вспомнить, где было несколько соединений, оказались ошибкой, а не предполагаемой.
Слот выполняется несколько раз (как уже говорили другие).
Некоторые примечания: