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 看不到每个线 ...
随机推荐
- HDU 3966 Aragorn's Story 树链剖分+树状数组 或 树链剖分+线段树
HDU 3966 Aragorn's Story 先把树剖成链,然后用树状数组维护: 讲真,研究了好久,还是没明白 树状数组这样实现"区间更新+单点查询"的原理... 神奇... ...
- ionic单页面应用中微信分享的问题总结
首先说一下 ionic 是单页面应用,也就是说整个项目就有一个index.html, 那么问题就就来了, 如果我们不同的页面要分享给大家的是不同的链接和图片,应该怎么去做呢? 这就是我们今天要总结的东 ...
- PHP造PDO对象和事务功能
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- java动手动脑和课后实验型问题
1.以下代码的输出结果是什么?为什么会有这个结果? int[] a = { 5, 7, 20 }; System.out.println("a数组中的元素:"); // 循环输出a ...
- 关于Gridview的列名问题
Gridview的的数据绑定方法有两种: 一种就是datasourceid的绑定在绑定过程当中也可以通过select来选择性的绑定. 二种就是databind(): SqlDataAdapter da ...
- Bootstrap<基础二十> 标签
Bootstrap 标签.标签可用于计数.提示或页面上其他的标记显示.使用 class .label 来显示标签,如下面的实例所示: <!DOCTYPE html> <html> ...
- hibernate的1+n
对数据库访问还是必须考虑性能问题的, 在设定了1 对多这种关系之后, 查询就会出现传说中的n +1 问题. 1 )1 对多,在1 方,查找得到了n 个对象, 那么又需要将n 个对象关联的集合取出,于是 ...
- Intellij IDEA 创建Web项目并在Tomcat中部署运行(不使用maven)【转载】
原文链接:http://www.thinksaas.cn/topics/0/350/350000.html 一.创建Web项目 1.File -> New Module,进入创建项目窗口 2.选 ...
- C++多线程2
#include "stdafx.h" #include <windows.h> int g_count; ; DWORD __stdcall Func(LPVOID ...
- Jquery与CSS选择器参考手册