Qt线程与线程池实现对比(QThread QThreadPool)
来源:互联网 发布:淘宝代付被骗怎么办 编辑:程序博客网 时间:2024/05/16 02:35
经过四处查询,在理解了微软底层线程与线程池(转载的文章中有介绍)的基础上,终于弄明白了在Qt中的实现过程,现将代码记录如下:
#include <QCoreApplication>#include <QThread>#include <QTimer>#include <QDebug>#include <QThreadPool>int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); qRegisterMetaType<string>("string"); const string str0="5f.bmp"; const string str1="6f.bmp";// QThread* thread0=new QThread;// QThread* thread1=new QThread;// thread0->start();// thread1->start();// CWorker* cworker0=new CWorker;// CWorker* cworker1=new CWorker;// cworker0->moveToThread(thread0);// cworker1->moveToThread(thread1);//// QTimer* timer=new QTimer;//// timer->start(2000);//// QObject::connect(timer,&QTimer::timeout,[=]{//// static int i=1;// cworker0->start(str0);// cworker1->start(str1);//// if(++i>4)//// timer->stop();//// }); //上面注释起来的部分是用线程的方式,执行多线程任务,线程数比较固定。 //以下是线程池优势的体现 //改变setMaxThreadCount,timer->start(1000)和count的值可以看到任务和开启线程之间的关系 //如果多个任务到来的时间间隔比较长,那么线程池只会开启一个或少数的线程去依次执行//到来的任务,如果任务来的比较集中,任务间隔很短,那么线程池会开启更多线程去完成任务 //只是最多只能开启setMaxThreadCount设置的线程数。 QThreadPool *pThreadPool=QThreadPool::globalInstance(); pThreadPool->setMaxThreadCount(3); pThreadPool->setExpiryTimeout(3000); qDebug()<<"main threadID:"<<QThread::currentThreadId(); int count=3; QTimer* timer=new QTimer; timer->start(1000); QObject::connect(timer,&QTimer::timeout,[=]{ static int k=0; string tmpStr; if(k%2==1) { tmpStr=str0; } else { tmpStr=str1; } CMyRunnable* MyRun=new CMyRunnable(tmpStr); pThreadPool->start(MyRun); if(++k==count) timer->stop(); }); return a.exec();}class CMyRunnable:public QRunnable{public: CMyRunnable(const string& str):QRunnable() { this->setAutoDelete(true); CMyStr=str; } virtual ~CMyRunnable() { qDebug()<<"over"; } void run();private: string CMyStr;};void CMyRunnable::run(){ process(CMyStr);//这个函数自己写,具体要在线程里完成什么任务 qDebug()<<"threadID: "<<QThread::currentThreadId();}
阅读全文
0 0
- Qt线程与线程池实现对比(QThread QThreadPool)
- QT 多线程(QThread)里调用线程池(QThreadPool )与主界面进行通讯
- Qt 线程基础(QThread、QtConcurrent、QThreadPool等)
- Qt 线程基础(QThread、QtConcurrent、QThreadPool等)
- QT线程池实验研究与分析(QThread与和QThreadPool + QRunnable使用上的区别)
- QT线程池实验研究与分析(QThread与和QThreadPool + QRunnable使用上的区别)
- Qt线程(QThread)
- qt线程 qthread(转)
- Qt之线程(QThread)
- Qt之线程(QThread)
- Qt之线程(QThread)
- QT线程池的使用:QThreadPool类和QRunnable类
- qt线程类---QThread
- Qt线程QThread简析
- QT中的线程QThread
- Qt之线程QThread
- Qt线程(QThread)的使用/简介
- QT——QThread线程
- 求最大值
- 初识Spring_01
- webservice通信调用天气预报接口实例
- UIMenuController实例
- 初学Opencv 之 (二)图像的载入 显示与输出
- Qt线程与线程池实现对比(QThread QThreadPool)
- 欢迎使用CSDN-markdown编辑器
- Aras 修改固化的Search过滤条件
- 封装MVC框架
- js和jquery转换
- Codeforces 429E Points and Segments 欧拉回路
- Linux学习day01
- 不同循环结构程序设计之间的区别及应用
- iiiLab提供的视频解析接口如何使用?转发个简单的使用教程