QThread, посвященный бесконечному циклу - PullRequest
0 голосов
/ 14 марта 2019

Итак, я хочу создать отдельный поток для моего бесконечного цикла while. Как исправить приведенный ниже код, чтобы он не нарушал соединение сигнального слота?

#include "gameloop.h"

GameLoop::GameLoop(QObject *parent) : QObject(parent)
{
    timer = new QTimer;
    connect(timer, SIGNAL(timeout()), this, SLOT(mySlot()));
    timer->start(500);
    thread = new QThread();
    console = new Console;
    console->moveToThread(thread);
    thread->start();

    run();
}

GameLoop::~GameLoop()
{
    std::cout << "GameLoop() Destructor" << "\n";
}

void GameLoop::run()
{
     console->loop();
}



void GameLoop::mySlot()
{
    std::cout << "mySlot" << "\n";
}

Функция-член loop () в классе Console содержит while (1).

1 Ответ

0 голосов
/ 14 марта 2019

Решение, которое решило мою проблему, заключается в следующем в коде ниже, таким образом, бесконечный цикл находится в потоке, назначенном ему:

#include "gameloop.h"
#include <QThread>
GameLoop::GameLoop(QObject *parent) : QObject(parent)
{
    std::cout << "GameLoop thread: " << QThread::currentThreadId()  << "\n";
    timer = new QTimer;
    timer->start(3000);
    connect(timer, SIGNAL(timeout()), this, SLOT(mySlot())); //timers

    thread1 = new QThread;

    console.moveToThread(thread1);
    thread1->start();
    connect(thread1, SIGNAL(started()), &console, SLOT(mySlotActivationLoop()));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...