QT websocket бесконечный цикл с задержкой

Пытаюсь написать первую программу на QT. Программа должна отображать текущий уровень громкости и коммуницировать с KODI через websoket. Я использовал пример simple echo. Вот что у меня есть на данный момент:

#include "websocket.h"

#include <QObject>
#include <QtCore/QDebug>
#include <QTimer>

QT_USE_NAMESPACE


kodiConnect::kodiConnect(const QUrl &url, QObject *parent) :
    QObject(parent),
    m_url(url)
{
    qDebug() << "WebSocket server:" << url;
    connect(&m_webSocket, &QWebSocket::connected, this, &kodiConnect::getPlayerID);
    //connect(&m_webSocket, &QWebSocket::disconnected, this, &kodiConnect::closed);
    m_webSocket.open(QUrl(url));
}

void kodiConnect::getPlayerID()
{
    qDebug() << "WebSocket connected";
    connect(&m_webSocket, &QWebSocket::textMessageReceived,this, &kodiConnect::parsePlayerId);
    m_webSocket.sendTextMessage(QStringLiteral("{\"jsonrpc\":\"2.0\",\"method\":\"Player.GetActivePlayers\",\"id\":1}"));
}


void kodiConnect::parsePlayerId(QString message)
{
      // Тут парсим JSON и создаем новый запрос.
      qDebug() << "Message received:" << message;

}

Как мне повторять запрос бесконечно начиная с getPlayerID() с задержкой 200мс?
Пример, который я использовал https://doc.qt.io/qt-5/qtwebsockets-echoclient-example.html


Ответы (1 шт):

Автор решения: Bearded Beaver

Например так:

    auto timer = new QTimer(this);  // создаем таймер
    timer->setInterval(200);        // задаем интервал, с которым будет срабатывать таймер
    connect(timer, &QTimer::timeout, this, &kodiConnect::getPlayerID);  // что вызывать по таймеру
    timer->start();                 // запускаем таймер

Только connect внутри функции getPlayerID вам надо вызвать один раз за все время. То есть вам нужна одна функция "установлено соединение с сокетом", где вы инициализируете и запускаете таймер, и вторая, которая срабатывает на каждый тик таймера

→ Ссылка