История изменений
Исправление
Legioner,
(текущая версия)
:
Обычно при вызове сигнала просто будут вызываться все соединенные слоты в том же потоке. Но, насколько я помню, если connect был сделан в одном потоке, а emit идёт из другого потока, то тогда будет кросспоточный вызов и emit продолжит своё выполнение, а тому потоку пошлётся сообщение и если он его обработает, то в этот момент вызовется метод-слот.
Вообще для понимания того, как это всё работает, рекомендую посмотреть, что творит moc с исходниками, посмотреть результат после работы препроцессора и посмотреть исходники всех интересующих функций в Qt. Мне это прояснило многие моменты, никакой магии там нет, всё на самом деле просто, до этого было недопонимание того, как это работает.
Про потоки выше написали про пятый аргумент, видимо верно, я скорее всего напутал про то, что кросс-поточный вызов идёт, если connect и emit из разных потоков.
Исходная версия
Legioner,
:
Обычно при вызове сигнала просто будут вызываться все соединенные слоты в том же потоке. Но, насколько я помню, если connect был сделан в одном потоке, а emit идёт из другого потока, то тогда будет кросспоточный вызов и emit продолжит своё выполнение, а тому потоку пошлётся сообщение и если он его обработает, то в этот момент вызовется метод-слот.
Вообще для понимания того, как это всё работает, рекомендую посмотреть, что творит moc с исходниками, посмотреть результат после работы препроцессора и посмотреть исходники всех интересующих функций в Qt. Мне это прояснило многие моменты, никакой магии там нет, всё на самом деле просто, до этого было недопонимание того, как это работает.