Всем привет!)
В проекте есть класс (Engine) с бесконечным циклом, который вынесен в отдельный поток (moveToThread()). В этом цикле эмитируется сигнал, который ловится слотом в другом классе (MainWindow).
То, что объявлено в MainWindow
QThread thread; //thread и cm- объявлен глобально, здесь для простоты
Engine *cm = new Engine;
cm->moveToThread(&thread);
connect(&thread, &QThread::finished, cm, &QObject::deleteLater);
connect(cm, &Engine::coordinate, this, &MainWindow::moveEngine);
thread.start();
То, что в Engine
void Engine::workfunction()
{
while(key == true)
{
...
emit coordinate(data);
if(key == false) break;
}
}
Теперь получается так, что этот сигнал ловится слотом только первый раз. Полазил в интернете, нашел, что «поток занят функцией с бесконечным циклом, и сигналы встают в очередь и не обрабатываются».
Пробовал дописать пятым параметром Qt::DirectConnection сначала - во второй, а потом и в первый конект с различными вариациями - не помогает.
Для меня видится две проблемы:
1. Как сделать отзывчивый бесконечный цикл средствами Qt.
2. Как правильно использовать вызовы для потока QThread.
Расскажите, пожалуйста