QT用线程启动定时器-创新互联
编写QT程序时,时常会需要使用定时器QTimer来执行一些定时任务,但当定时任务执行的时间过长,则会影响整个界面的响应,因此会想到使用另一个工作线程来执行定时器,一般情况下可以选择从QThread派生一个线程类,然后重载run并执行任务逻辑,那下面就介绍一个不用从QThread派生并使用QTimer的例子。
成都创新互联公司自2013年起,先为梁园等服务建站,梁园等地企业,进行企业商务咨询服务。为梁园企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。主窗口类头文件加入:
[cpp] view plain
QThread* _voiceThread;
QTimer* _voiceTimer;
构造函数加入:
[cpp] view plain
// 使用一个线程,跑定时器
_voiceThread = new QThread;
_voiceTimer = new QTimer;
_voiceTimer->setSingleShot(true);
// 在moveToThread前先启动定时器,不然不在一个线程里,直接调用start会失败
_voiceTimer->start(200);
_voiceTimer->moveToThread(_voiceThread);
// 定时器对象和this不在一个线程里面,因此这边指定了连接方式为Qt::DirectConnection,由定时器所在线程直接触发_onVoiceTimeout
connect(_voiceTimer, SIGNAL(timeout()), this, SLOT(_onVoiceTimeout()), Qt::DirectConnection);
// 连接定时器槽,用来停止定时器
connect(this, SIGNAL(stop()), _voiceTimer, SLOT(stop()));
_voiceThread->start();
析构函数加入:
[cpp] view plain
emit stop();
_voiceThread->quit();
_voiceThread->wait();
delete _voiceTimer;
delete _voiceThread;
定时器槽:
[cpp] view plain
void Test::_onVoiceTimeout()
{
// 执行任务
// ...
_voiceTimer->start(1000);
}
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
名称栏目:QT用线程启动定时器-创新互联
本文网址:http://pwwzsj.com/article/hgddc.html