Size: a a a

2020 March 25

A

Alex in Qt
Всем добрый день.
Объясните, пожалуйста, один нюанс по поводу connect. При описании коннекта есть флаг Qt::ConnectionType, который может принимать определённые значения. В документации написано по этому поводу, что если мы работаем в одном потоке, то необходимо выставлять один флаг, если сигнал идёт в другой поток, выставляем другой, к тому же там есть autoConnection, который сам выбирает какой флаг используется, в зависимости от того, в одном или в разных потоках источник и приёмник(вольная адаптация).
Вопросы у меня возникли следующие:
1. Почему и зачем явно прописываются флаги, если можно оставить по дефолту авто и он сам разрулит. Есть ли другая причина, кроме читабельности
2. Если у тебя передающий и принимающий объекты работают в одном потоке, а мы установили флаг QueuedConnection, как себя поведёт программа? (и аналогично с directConnection) Слот просто не обработается или рантаймовская ошибка будет?
источник

SE

Suigintou45 E13 in Qt
Alex
Всем добрый день.
Объясните, пожалуйста, один нюанс по поводу connect. При описании коннекта есть флаг Qt::ConnectionType, который может принимать определённые значения. В документации написано по этому поводу, что если мы работаем в одном потоке, то необходимо выставлять один флаг, если сигнал идёт в другой поток, выставляем другой, к тому же там есть autoConnection, который сам выбирает какой флаг используется, в зависимости от того, в одном или в разных потоках источник и приёмник(вольная адаптация).
Вопросы у меня возникли следующие:
1. Почему и зачем явно прописываются флаги, если можно оставить по дефолту авто и он сам разрулит. Есть ли другая причина, кроме читабельности
2. Если у тебя передающий и принимающий объекты работают в одном потоке, а мы установили флаг QueuedConnection, как себя поведёт программа? (и аналогично с directConnection) Слот просто не обработается или рантаймовская ошибка будет?
queued в одном потоке поставит вызов в эвентлуп и выйдет из вызвавшей функции
источник

SE

Suigintou45 E13 in Qt
и direct между потоками тоже работает, только осторожно)
источник

IZ

Ilia Zviagin in Qt
Alex
Всем добрый день.
Объясните, пожалуйста, один нюанс по поводу connect. При описании коннекта есть флаг Qt::ConnectionType, который может принимать определённые значения. В документации написано по этому поводу, что если мы работаем в одном потоке, то необходимо выставлять один флаг, если сигнал идёт в другой поток, выставляем другой, к тому же там есть autoConnection, который сам выбирает какой флаг используется, в зависимости от того, в одном или в разных потоках источник и приёмник(вольная адаптация).
Вопросы у меня возникли следующие:
1. Почему и зачем явно прописываются флаги, если можно оставить по дефолту авто и он сам разрулит. Есть ли другая причина, кроме читабельности
2. Если у тебя передающий и принимающий объекты работают в одном потоке, а мы установили флаг QueuedConnection, как себя поведёт программа? (и аналогично с directConnection) Слот просто не обработается или рантаймовская ошибка будет?
Очевидно же, что иногда ты можешь хотеть посылать В ОДНОМ ПОТОКЕ сигналы АСИНХРОННО.
источник

A

Alex in Qt
Suigintou45 E13
и direct между потоками тоже работает, только осторожно)
Слот вызывается немедленно, ломая весь порядок в эвентпуле и завершая работу вызываемого потока для запуска новой обработки в этом потоке?
источник

SE

Suigintou45 E13 in Qt
не, он просто вызывается из другого потока. как обычная функция
источник

IZ

Ilia Zviagin in Qt
Alex
Всем добрый день.
Объясните, пожалуйста, один нюанс по поводу connect. При описании коннекта есть флаг Qt::ConnectionType, который может принимать определённые значения. В документации написано по этому поводу, что если мы работаем в одном потоке, то необходимо выставлять один флаг, если сигнал идёт в другой поток, выставляем другой, к тому же там есть autoConnection, который сам выбирает какой флаг используется, в зависимости от того, в одном или в разных потоках источник и приёмник(вольная адаптация).
Вопросы у меня возникли следующие:
1. Почему и зачем явно прописываются флаги, если можно оставить по дефолту авто и он сам разрулит. Есть ли другая причина, кроме читабельности
2. Если у тебя передающий и принимающий объекты работают в одном потоке, а мы установили флаг QueuedConnection, как себя поведёт программа? (и аналогично с directConnection) Слот просто не обработается или рантаймовская ошибка будет?
Кроме этого, вид коннекта определяется по принадлежности объектов В ДАННЫЙ МОМЕНТ,
но в программе объекты Qt могут быть переданы из одного потока в другой, и нужен уже ДРУГОЙ вид коннекта
источник

A

Alex in Qt
Suigintou45 E13
не, он просто вызывается из другого потока. как обычная функция
А если другой поток в этот момент что - то делает?
источник

IZ

Ilia Zviagin in Qt
Alex
А если другой поток в этот момент что - то делает?
То хана.
источник

A

Alex in Qt
Ilia Zviagin
Кроме этого, вид коннекта определяется по принадлежности объектов В ДАННЫЙ МОМЕНТ,
но в программе объекты Qt могут быть переданы из одного потока в другой, и нужен уже ДРУГОЙ вид коннекта
Об этом никогда не задумывался даже. Спасибо)
источник

SE

Suigintou45 E13 in Qt
Alex
А если другой поток в этот момент что - то делает?
ну и пускай делает. вызов в контексте другого потока выполнится. можно пользоваться семаформи и прочим, если надо
источник

A

Alex in Qt
Ilia Zviagin
Очевидно же, что иногда ты можешь хотеть посылать В ОДНОМ ПОТОКЕ сигналы АСИНХРОННО.
Астнхронность добивается тем, что слот отрабатывает при последующем вызове этого потока в евентпуле, верно?
источник

IZ

Ilia Zviagin in Qt
Suigintou45 E13
ну и пускай делает. вызов в контексте другого потока выполнится. можно пользоваться семаформи и прочим, если надо
Не, не, ты не хочешь посыслать другому потоку сигналы строго синхронно
источник

IZ

Ilia Zviagin in Qt
Alex
Астнхронность добивается тем, что слот отрабатывает при последующем вызове этого потока в евентпуле, верно?
Да
источник

A

Alex in Qt
Спасибо за разъяснения, прям глаза открыли)
источник

SE

Suigintou45 E13 in Qt
Ilia Zviagin
Не, не, ты не хочешь посыслать другому потоку сигналы строго синхронно
ну там ещё есть Qt::BlockingQueuedConnection
источник

PM

Peter Mironychev in Qt
Кто нить с таким сталкивается?
источник

PM

Peter Mironychev in Qt
источник

PM

Peter Mironychev in Qt
Надоело уже настолько что сил нет
источник

SE

Suigintou45 E13 in Qt
было такое. само прошло после обновления. ничего не менял
источник