У меня возникли трудности с пониманием того, что происходит, например, напр. два разных сигнала подключаются к двум разным слотам, и когда один слот не выполняется, выдается сигнал других слотов (для обоих слотов, подключенных к их соответствующим сигналам в прямом соединении), где приложение имеет только «одну» нить.Сигналы QT и слоты для прямого соединения в приложении с одной нитью
Это из официальной документации QT:
Прямое соединение: Слот вызывается сразу же, когда сигнал. Слот выполняется в потоке эмиттера, что не обязательно является потоком получателя.
Очередное соединение: слот вызывается, когда управление возвращается в цикл событий потока получателя. Слот выполняется в потоке получателя.
Он говорит «немедленно» для прямого соединения в отличие от очереди в очереди. Означает ли это, что если второй сигнал выдается, когда первый слот еще не выполнен, первый слот будет прерван, и он будет работать одновременно со вторым слотом, даже если приложение является однопоточным приложением? Если да, почему бы мне не увидеть какие-либо предупреждения о том, что нужно использовать мьютексы для блокировки переменных, к которым могут обращаться оба слота.
Возможно, я недопонимаю всю вещь «Прямая» и «Очередь».
Невозможно сделать что-либо по-настоящему одновременно в той же теме. Нить имеет один локус управления. То, как вы его просите, - это бессмыслица, в значительной степени. «Немедленно» означает «слоты называются последовательно от тела сигнала». Сигнал - это метод С ++, а не магия. Он перечисляет непосредственно подключенные слоты/функторы и вызывает их. Он перечисляет все подключенные слоты/функторы, помещенные в очередь, и помещает 'QMetaCallEvent' в свои объекты контекста. **Это все**. –