QT中使用另外的线程运行定时器

本文介绍了如何在QT编程中,为避免定时器任务影响界面响应,将QTimer放入单独的工作线程执行。通过不从QThread派生,而是采用其他方式实现线程内定时任务的执行。
摘要由CSDN通过智能技术生成

       编写QT程序时,时常会需要使用定时器QTimer来执行一些定时任务,但当定时任务执行的时间过长,则会影响整个界面的响应,因此会想到使用另一个工作线程来执行定时器,一般情况下可以选择从QThread派生一个线程类,然后重载run并执行任务逻辑,那下面就介绍一个不用从QThread派生并使用QTimer的例子。

       在类定义public中添加

    QThread* _TimerThread;
    QTimer* _WriteTimer;
    void WriteTimestop();

       在private slot中添加

    void _onWriteTimeout();

       构造函数中添加:

     // 使用一个线程,跑定时器
        _TimerThread = new QThread;
        _WriteTimer = new QTimer;
        _WriteTimer->setSingleShot(true);
        // 在moveToThread前先启动定时器,不然不在一个线程里,直接调用start会失败
        _WriteTimer->start(2000);
        _WriteTimer->moveToThread(_TimerThread);
        // 定时器对象和this不在一个线程里面,因此这边指定了连接方式为Qt::DirectC
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值