Задать вопрос
PavelK
@PavelK

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

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

Проблема в том, что на каждый вызов метода из другого потока или прописывать объявление сигнала и подключение слота, либо использовать QMetaObject::invokeMethod что сильно раздувает вызов в случае передачи параметров.

Так вот, есть ли какой-либо "подход"/паттерн, что бы при прямом вызове слотов из другого потока они вызывались внутри очереди этого потока?
  • Вопрос задан
  • 254 просмотра
Подписаться 1 Сложный Комментировать
Решения вопроса 1
IGHOR
@IGHOR Куратор тега Qt
Qt/C++ DEV/CTO
Если вам надо ожидать ответ то вот:
Qt::BlockingQueuedConnection
https://doc.qt.io/qt-5/qt.html#ConnectionType-enum
во время выполнения оба потока будут заблокированы

А если не надо ожидать то безопасно вызывать напрямую сигналы из других потоков, которые подключены в свой объект через Qt::QueuedConnection

И если сигнал отправлять с qmetaobject::invokeMethod в удаленный класс то будет вылет. Так что это следует избегать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы