QT用线程启动定时器-创新互联

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

成都创新互联公司自2013年起,先为梁园等服务建站,梁园等地企业,进行企业商务咨询服务。为梁园企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

主窗口类头文件加入:

[cpp] view plain

  1. QThread* _voiceThread;

  2. QTimer* _voiceTimer;

构造函数加入:

[cpp] view plain

  1. // 使用一个线程,跑定时器

  2. _voiceThread = new QThread;

  3. _voiceTimer = new QTimer;

  4. _voiceTimer->setSingleShot(true);

  5. // 在moveToThread前先启动定时器,不然不在一个线程里,直接调用start会失败

  6. _voiceTimer->start(200);

  7. _voiceTimer->moveToThread(_voiceThread);

  8. // 定时器对象和this不在一个线程里面,因此这边指定了连接方式为Qt::DirectConnection,由定时器所在线程直接触发_onVoiceTimeout

  9. connect(_voiceTimer, SIGNAL(timeout()), this, SLOT(_onVoiceTimeout()), Qt::DirectConnection);

  10. // 连接定时器槽,用来停止定时器

  11. connect(this, SIGNAL(stop()), _voiceTimer, SLOT(stop()));

  12. _voiceThread->start();

析构函数加入:

[cpp] view plain

  1. emit stop();

  2. _voiceThread->quit();

  3. _voiceThread->wait();

  4. delete _voiceTimer;

  5. delete _voiceThread;

定时器槽:

[cpp] view plain

  1. void Test::_onVoiceTimeout()

  2. {

  3.     // 执行任务

  4.     // ...

  5.     _voiceTimer->start(1000);

  6. }

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

本文题目:QT用线程启动定时器-创新互联
转载注明:https://www.cdcxhl.com/article12/hgddc.html

成都网站建设公司_创新互联,为您提供全网营销推广网页设计公司电子商务营销型网站建设微信公众号品牌网站设计

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

h5响应式网站建设