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

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

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

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

1 ответ

Решение

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

Другие вопросы по тегам