сделать класс с QTimer в потоке - PullRequest
       39

сделать класс с QTimer в потоке

0 голосов
/ 05 сентября 2018

Мне нужен класс, который отправляет данные из другого потока по таймеру как это:

QPointer<Checker> checker;
connect(checker, &Checker::newData, this, &MyClass::process, Qt::BlockingQueuedConnection); // process(QMap<QString, int>)

Мое понимание: .h

class Checker: public QObject
{
    Q_OBJECT
    QThread m_thread;
    QTimer m_timer;
signals:
    void stop();
private slots:
    void started() { m_timer.start(1000); }
    void stoped() { m_timer.stop(); }
    void timeout();
public:
    Checker();
    ~Checker();
    Q_SIGNAL void newData(QMap<QString, int>);
};

.cpp

void Checker::timeout()
{
    emit newData({});
}

Checker::Checker()
{
    this->moveToThread(&m_thread);

    m_timer.moveToThread(&m_thread);
    m_thread.start();

    connect(&m_thread, &QThread::started, this, &Checker::started);
    connect(this, &Checker::stop, this, &Checker::stoped);
    connect(&m_timer, &QTimer::timeout, this, &Checker::timeout);
}

Checker::~Checker()
{
    emit stop();
    m_thread.quit();
    m_thread.wait();
}

Этот код правильный? Есть ли более простой способ? Почему QueuedConnection не подключается? (BlockingQueuedConnection - сработало)

...