Qt线程(4) 降低线程占用CPU
- 问题描述:
一般将计算量大的处理过程单独放置到一个单独的线程处理,因此很有可能你的处理过程需要while(1)或类似的操作。
也因此很有可能造成线程在处理时计算机CPU占用过高的情况。
- 解决办法:
- 降低相应线程优先级
- sleep
- 具体实现:
1.创建工作线程
#include <QThread> #include <QDebug> #include <QMutex> #include <QMutexLocker> #include <unistd.h> class WorkThread : public QThread { Q_OBJECT public: ): QThread(parent) ,m_bStop(false) ,m_iTest() {} ~WorkThread() { wait(); } void stop() { QMutexLocker Locker(&m_mutexLock); m_bStop = true; } protected: void run() { do{ m_iTest++; emit sigFind(QString::number(m_iTest)); sleep();//::sleep(10); }while(!m_bStop); } signals: void sigFind(const QString &); private: bool m_bStop; int m_iTest; QMutex m_mutexLock; };
2.创建工作对象
#include <QObject> #include <QDateTime> #include <QTimerEvent> #include <QCoreApplication> #include "workthread.hpp" class WorkObject : public QObject { Q_OBJECT private: int m_iTimerId_PrintTime; WorkThread *m_threadWork; public: ): QObject(parent) ,m_iTimerId_PrintTime(-) ,m_threadWork() { //Timer m_iTimerId_PrintTime = startTimer();//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()<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"); } } private slots: void slotFind(const QString &s) { qDebug()<<"Find:"<<s; } };
3.main.cpp
#include <QTimer> #include <QtCore/QCoreApplication> #include "workobject.hpp" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); WorkObject worker; QTimer::singleShot(, &a, SLOT(quit())); return a.exec(); }
4.执行结果
- 最后:你懂滴,sleep会降低速度...所以测试一下,使用较低优先级或许就可以满足您的要求了呢~~
Qt线程(4) 降低线程占用CPU的更多相关文章
- Linux中找到占用cpu最高的线程
在工作中,经常会碰到CPU占用100%的情况,那如何找到是那个线程占用了cpu呢? 1. top命令,找到cpu占用最高的进程 2. 查看该进程的线程, top -p <pid> 3. ...
- CPU线程 和 Java线程
一 cpu个数.核数.线程数的关系 cpu个数:是指物理上,也及硬件上的核心数: 核数:是逻辑上的,简单理解为逻辑上模拟出的核心数:一个CPU核心数模拟出2线程的CPU 线程数:是同一时刻设备能并行执 ...
- 线程回调,线程中的队列,事件,greenlet模块,gevent模块,自定义补丁, 单线程实现并发,协程
1.线程回调 在线程池/进程池每次提交任务,都会返回一个表示任务的对象,Future对象Future对象具备一个绑定方法,add_done_callback 用于指定回调函数 add 意味着可以添加多 ...
- Linux排查Java程序占用CPU很高的解决办法
Java的工具集相当强大,学习成本也很低,处理线上问题时,jstack这个工具就比微软的windbg,好学好用很多,3步找出占用CPU很高的源所在.而windbg反人类的各种命令,实在不敢恭维. 故意 ...
- 线上Java程序占用 CPU 过高,请说一下排查方法?
我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...
- 服务器CPU又爆了?Linux快速排查Java程序占用CPU很高的方法
这个问题可以说是 Java 面试的高频面试题了,有很多面试官都喜欢问这个问题,问题可能是下面这样的. 线上一台服务器 CPU 使用率100% 了,如果你碰到这样的情况,如何排查并找到问题原因? 1.场 ...
- 再记一次w3wp占用CPU过高的解决过程(Dictionary和线程安全)
在此之前项目有发生过两次类似的状况,都得以解决,但最近又会发现偶尔CPU会跑满,虽然之前使用过WinDbg解决过两次问题但人的记忆是不可靠的,今天处理同样问题的时候还是遇到了一些障碍,这一次希望可以记 ...
- 记一次w3wp占用CPU过高的解决过程(Dictionary和线程安全)
项目上线以来一直存在一个比较揪心的问题,和一个没有信心处理的BUG,那就是在应用程序启动时有可能会导致cpu跑满99%或持续在一个值如50%左右,这样一来对服务器的压力是非常大的,经常出现服务器无法远 ...
- windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码
我的一个java程序偶尔会出现cpu占用很高的情况 一直不知道什么原因 今天终于抽时间解决了 系统是win2003 jvisualvm 和 jconsole貌似都只能看到总共占用的cpu 看不到每个线 ...
随机推荐
- function,new function,Function,new Function 之间的区别
测试一: var fud01 = function() { var temp = 100; this.temp = 200; return temp + this.temp; } alert(typ ...
- Web前端开发规范手册
一.规范目的 1.1 概述 为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必须按本文档规范进行前台页面开发. ...
- OC基础--Property
编译器指令: 用来告诉编译器要做什么 @property: @property是编译器的指令 告诉编译器在@interface中自动生成setter和getter的声明 @synthesize: @s ...
- CDH5.4.5运行多字符分割记录
准备工作: 测试文件内容:cis_cust_imp_info 20131131|+|100010001001|+|BR01|+|2000.0120131131|+|100010001002|+|BR0 ...
- 用Advanced Installer制作DotNetBar for Windows Forms 12.0.0.1_冰河之刃重打包版详解
关于 DotNetBar for Windows Forms 12.0.0.1_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版-------------- ...
- memo的一般方法
str := '好时代卡卡卡的水平佛单师傅开锁'; Memo1.Lines.Add(str); // 在最后加一行字符串 Memo1.Lines.Delete(x); // 删除x+1行字符串 Mem ...
- jQuery深层次复制对象
<script type="text/javascript" src="http://libs.baidu.com/jquery/1.9.1/jquery.min. ...
- android之fragment
觉得写得好:http://blog.csdn.net/shulianghan/article/details/38064191
- ie7、ie8 下Table 中 td 列固定宽度 未按样式设定显示 曲线解决方案
<!doctype html> <html> <head> <meta charset='utf-8'> <style> .title {b ...
- java install
http://www.cnblogs.com/a2211009/p/4265225.html