博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt线程--降低线程占用CPU
阅读量:5166 次
发布时间:2019-06-13

本文共 2228 字,大约阅读时间需要 7 分钟。

问题描述

一般将计算量大的处理过程单独放置到一个单独的线程处理,因此很有可能你的处理过程需要while(1)或类似的操作。也因此很有可能造成线程在处理时计算机CPU占用过高的情况。

解决办法

  • 降低相应线程优先级
  • sleep

具体实现

    1.创建工作线程

#include 
#include
#include
#include
#include
class WorkThread : public QThread{ Q_OBJECTpublic: explicit WorkThread(QObject *parent = 0): QThread(parent) ,m_bStop(false) ,m_iTest(0) {} ~WorkThread() { wait(); } void stop() { QMutexLocker Locker(&m_mutexLock); m_bStop = true; }protected: void run() { do{ m_iTest++; emit sigFind(QString::number(m_iTest)); sleep(10);//::sleep(10); }while(!m_bStop); }signals: void sigFind(const QString &);private: bool m_bStop; int m_iTest; QMutex m_mutexLock;};

 

    2.创建工作对象

#include 
#include
#include
#include
#include "workthread.hpp"class WorkObject : public QObject{ Q_OBJECTprivate: int m_iTimerId_PrintTime; WorkThread *m_threadWork;public: explicit WorkObject(QObject *parent = 0): QObject(parent) ,m_iTimerId_PrintTime(-1) ,m_threadWork(0) { //Timer m_iTimerId_PrintTime = startTimer(1000);//print current time: yyyy-MM-dd hh:mm:ss // WorkThread m_threadWork = new WorkThread(this); connect(m_threadWork,SIGNAL(sigFind(QString)),this,SLOT(slotFind(QString))); connect(m_threadWork,SIGNAL(finished()),m_threadWork,SLOT(deleteLater())); m_threadWork->start(); } ~WorkObject() { if(m_threadWork) m_threadWork->stop(); }protected: void timerEvent(QTimerEvent *event) { if(event->timerId() == m_iTimerId_PrintTime) { qDebug()<

 

    3.main.cpp

#include 
#include
#include "workobject.hpp"int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); WorkObject worker; QTimer::singleShot(10000, &a, SLOT(quit())); return a.exec();}

 

    4.执行结果

  

最后

sleep会降低速度...所以测试一下,使用较低优先级或许就可以满足您的要求了呢~~

转载于:https://www.cnblogs.com/hejianglin/p/5854827.html

你可能感兴趣的文章
编译原理 First,Follow,select集求法
查看>>
iOS开发 runtime实现原理以及实际开发中的应用
查看>>
BZOJ2437 NOI2011兔兔与蛋蛋(二分图匹配+博弈)
查看>>
android 学习资源网址
查看>>
qt安装遇到的错误
查看>>
java:Apache Shiro 权限管理
查看>>
objective c的注释规范
查看>>
FreeNas安装配置使用
查看>>
Scrapy框架-CrawlSpider
查看>>
Django(一)框架简介
查看>>
Python操作SQLite数据库的方法详解
查看>>
实验二:编写输出"Hello World!"
查看>>
菜单和工具条(二)
查看>>
hadoop17---RPC和Socket的区别
查看>>
[BZOJ 3531] [Sdoi2014] 旅行 【离线+LCT】
查看>>
使用JMeter代理录制app测试脚本
查看>>
MVC 未启用角色管理功能
查看>>
Linq to Object实现分页获取数据
查看>>
mac常用系统命令
查看>>
第42章:MongoDB-集群--Sharding(分片)--单机的搭建
查看>>