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