Приветствую!
Требуется сделать бесконечный цикл для обработки некоторых данных,
цикл сделал, вынес в отдельный класс в поток, всё работает, всё ок.
Но понадобилось обрабатывать сигналы слоты, а именно притормозить цикл, как слот отработал, его продолжить. Для этого уже насоздавал кучу переменных, для тех или иных слотов для каждого действия. Что-то код стал по-моему уже попахивать...
Может быть есть "правильный" способ действий в таких ситуациях?
Как я вижу в идеале:
в классе за место вечного цикла вызывается одна и та же функция, как только классу приходит какое-либо событие (сигнал) он приостанавливает вызов и вызывает уже нужный слот, как он отработал, продолжает.
Пробовал реализовать через connection и в конце слота делал ermit signal
но то-ли руки у меня кривые, то ли у Qt есть какие-то проблемы с вызовом из самого себя. Вашим методом не пробовал, но метод однозначно лучше.
Если я правильно помню то сигналы к слоту из потока надо цеплять с флагом Qt::QueuedConnection
а в нутриях цикла, когда понимаешь, что можно бы обработать внешние сигналы надо звать QEventLoop::processEvents
В целом ход верный. Если соединяется сигнал и слот из разных потоков, то тип соединения автоматически становится Qt::QueuedConnection. Вместо QEventLoop::processEvents я бы порекомендовал QCoreApplication::processEvents. doc.qt.io/qt-5/qcoreapplication.html#processEvents Processes all pending events for the calling thread ... until there are no more events to process.