Подтвердить что ты не робот

Qt Сигналы и безопасность прорези

Скажем, у меня есть изменение сигнала, связанное с уведомлением о слоте. Если выдается сигнал изменения, начнется выполнение уведомления.

Теперь, что произойдет, если выдается второй сигнал изменения, и первый слот уведомления не завершил его выполнение?

Является ли второй слот запущенным одновременно с первым? И если да, то Qt управляет безопасностью потока или до программиста для его обработки?

4b9b3361

Ответ 1

Это зависит от типа соединения, который вы указали с помощью функции connect. Единственный способ, когда слот будет запускаться одновременно, - это если вы указали Qt::DirectConnection И излучаете сигнал в потоке, отличном от нити слота. Если вы опустите тип соединения, это будет Qt::AutoConnection. В этом случае, если вы выпустите сигнал из одного потока и поймаете его в другом (например, в главном потоке графического интерфейса) - Qt поместит вызов слота в очередь сообщений и сделает все вызовы последовательно. Прочтите это для дополнительной информации - http://qt-project.org/doc/qt-4.8/threads-qobject.html#signals-and-slots-across-threads