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

来源:互联网 发布:电脑系统破坏软件 编辑:程序博客网 时间:2024/05/22 04:54

       编写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::DirectConnection,由定时器所在线程直接触发_onVoiceTimeout        connect(_WriteTimer, SIGNAL(timeout()), this, SLOT(_onWriteTimeout()), Qt::DirectConnection);        // 连接定时器槽,用来停止定时器        connect(this, SIGNAL(WriteTimestop()), _WriteTimer, SLOT(stop()));        _TimerThread->start();    在析构函数中添加
    emit WriteTimestop();    _TimerThread->quit();    _TimerThread->wait();    delete _WriteTimer;    delete _TimerThread;

	
				
		
原创粉丝点击