PavelK
@PavelK

Бесконечный цикл в Qthead, как сделать правильно?

Приветствую!
Требуется сделать бесконечный цикл для обработки некоторых данных,
цикл сделал, вынес в отдельный класс в поток, всё работает, всё ок.
Но понадобилось обрабатывать сигналы слоты, а именно притормозить цикл, как слот отработал, его продолжить. Для этого уже насоздавал кучу переменных, для тех или иных слотов для каждого действия. Что-то код стал по-моему уже попахивать...
Может быть есть "правильный" способ действий в таких ситуациях?

Как я вижу в идеале:
в классе за место вечного цикла вызывается одна и та же функция, как только классу приходит какое-либо событие (сигнал) он приостанавливает вызов и вызывает уже нужный слот, как он отработал, продолжает.
  • Вопрос задан
  • 1263 просмотра
Решения вопроса 2
Obukhoff
@Obukhoff
Программист С++
Для постоянного цикла вам лучше реализовать слот, который будет постоянно вызываться в конце самого себя:

test.h:
private slots:
   void workMethod();

test.cpp:
void Class:workMethod()
{
     ....
    QMetaObject::invokeMethod(this, "workMethod", Qt::QueuedConnection);
}

Тогда ваш метод будет выполнять каждую итерацию под управлением очереди сообщений и в любой момент вы можете остановить поток.
Ответ написан
@xandox
Если я правильно помню то сигналы к слоту из потока надо цеплять с флагом Qt::QueuedConnection
а в нутриях цикла, когда понимаешь, что можно бы обработать внешние сигналы надо звать QEventLoop::processEvents
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
petermzg
@petermzg
Самый лучший программист
А постоянный вызов одной и той же функции без вечного цикла вы как реализуете?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы