qt 定时器在子线程中运行

头文件中

private:

    QTimer *m_pTimer;
    QThread *m_pThread;

private slots:

void timeOutSlot();

.cpp中

void ControlWidget::startThreadTime() {
    qDebug() << "howard ===startThreadTime";
    m_pThread = new QThread(this);
    m_pTimer = new QTimer();
    m_pTimer->moveToThread(m_pThread);
    m_pTimer->setTimerType(Qt::PreciseTimer);

//temp_refresh_time是时间间隔
    m_pTimer->setInterval(temp_refresh_time);
    connect(m_pThread, SIGNAL(started()), m_pTimer, SLOT(start()));
    connect(m_pTimer, SIGNAL(timeout()), this, SLOT(timeOutSlot()), Qt::DirectConnection);
    m_pThread->start();
}

void ControlWidget::timeOutSlot(){

//定时时间到的回调

}

如果再次启动的话

        m_pTimer->stop();
        m_pTimer->destroyed();
        m_pThread->wait();
        m_pThread = new QThread(this);
        m_pTimer = new QTimer();
        m_pTimer->moveToThread(m_pThread);
        m_pTimer->setTimerType(Qt::PreciseTimer);
        m_pTimer->setInterval(temp_refresh_time);
        connect(m_pThread, SIGNAL(started()), m_pTimer, SLOT(start()));
        connect(m_pTimer, SIGNAL(timeout()), this, SLOT(timeOutSlot()), Qt::DirectConnection);
        m_pThread->start();

 

 

参考https://www.cnblogs.com/hellovenus/p/qt_thread_timer.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值