网站首页 > 文章精选 正文
上述的方法需要手动建立线程,如果并发线程数量较多,而且每个线程只执行较短的任务就结束,这样就会导致线程的频繁创建和销毁,从而降低效率。因此给出另外一种做法--线程池QThreadPool。线程池的优点在于可以自动分配线程,而且可以自动对闲置的线程进行复用,提高效率。
QT为每个应用程序提供了一个全局的线程池变量对象,通过静态函数可以获取。
static QThreadPool* QThreadPool::globalInstance();
一般不需要自己创建新的线程池对象,使用该全局变量即可。得到该变量后,通过调用start()可以添加任务到线程池中,这个任务就可以被线程池处理掉了。
与上一个方法不同,进入线程池的任务对象不是继承QThread类,而是继承Qrunnabel类,然后再重写run。常用函数如下:
[pure virtual] void run();//任务写在该函数中
void setAutoDelete(bool autoDelete);//设置是否自动销毁,常设为true
建立步骤如下:
第一步:创建任务类,由于需要使用信号和槽,所以还需继承QObject,不需要则可不继承,并在构造函数中调用setAutoDelete设置是否自动销毁,建议设置为true;
Class Bubble : public QRunnabl,public QObject
第二步:在mainwindow.cpp中新建任务对象
Bubble* bubble = new Bubble;
第三步:通过线程池全局对象调用start函数添加该任务即可。
QThreadPool::globalInstance()->start(bubble);
下面是采取线程池的方法对上一示例生成的随机数进行冒泡排序和快速排序的结果
- 上一篇: 脑卒中急性期心脏也容易出问题 千万别忽视!
- 下一篇: Qt编程基础(qt 编程 教程)
猜你喜欢
- 2025-06-08 Qt MQTT之服务器介绍(mqtt服务器功能)
- 2025-06-08 在 STM32 开发里,RTOS 真比裸机编程更有优势?别盲目迷信!
- 2025-06-08 C++大型流媒体项目-从底层到应用层千万级直播系统实战
- 2025-06-08 万能药:胺碘酮使用注意事项(胺碘酮用法及用量)
- 2025-06-08 同一个类,不同代码,Qt 串口类QSerialPort 与各种外设通讯处理
- 2025-06-08 室性心律失常首选药物大汇总(室性心律失常首选下列哪种药物)
- 2025-06-08 QT桌面客户端在Linux下的开发流程
- 2025-06-08 座舱SOC的Linux内核性能调优(座舱soc起不来)
- 2025-06-08 为什么要有协程?(为什么要有协议)
- 2025-06-08 干货收藏!10分钟帮你搞定3种心电图!
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)