开源软件入门系列

不定期更新开源软件的入门教程和二次开发相关内容,欢迎大家阅读和留言交流

目前拟定的相关方向为:

这个月拟更新部分Qt 相关的内容

1.1 Qt 多线程

1.2 Qt mvc 框架

1.3 Qt mvvm 框架

1.4 Qt mfc 支持


今天文章的标题为 Qt 多线程之 QThread


基本介绍

在进行桌面应用程序开发时,假设需要处理较为复杂的逻辑,如果只用主线程,会导致卡顿,因为一个线程只能同时处理一件事。因此需要多线程,主线程处理窗口事件,其他子线程处理逻辑并将结果传递给主线程。


QT中使用多线程需注意以下事项:

1.默认线程为窗口线程,也叫主线程,负责窗口事件处理及窗口控件的数据更新。

2.子线程负责后台的业务逻辑,不能对窗口进行任何操作。

3.子线程与主线程之间的数据传递需要QT的信号和槽机制。


一. QThread

QT提供了一个线程类Qthread,接下来介绍需要用到的函数。

1.公共成员函数

bool isFinished();//判断进程是否结束

bool isRunning();//判断进程是否在进行

Priority priority();//获取线程优先级

void setPriority(Priority priority);//设置线程优先级

void exit();//退出线程

void wait();//等待线程任务完成,然后退出线程,一般会在exit函数后使用。

2.槽函数

void quit();//效果等同于exit

void start();//启动线程

3.信号

void finished();//线程结束后会发出该信号

void started();//线程开始时发出该信号

4.静态函数

QThread* QThread::currentThread();//返回当前线程的指针

int QThread::idealThreadCount();//返回可以运行的理想线程数,与当前电脑CPU核心数相同

5.任务处理函数

[virtual protected] void run();//子线程处理的任务写到该函数中,该函数为虚函数,因此需要建立子类继承QThread重写run,而且是protected,因此不能类外调用,使用时调用start(),start会自动调用run.

使用方法

QT提供多种建立子线程的方法,先介绍简单的一种。

第一步:创建一个类,使其继承QThread。

Class MyThread : public QThread

第二步:重写run函数,在函数内写子线程要处理的任务

第三步:在主线程创建子线程对象,即在mainwindow.cpp中如下操作:

MyThread* subThread = new MyThread;

第四步:调用start

subThread->start();

实例演示

接下来通过实例演示QT多线程的使用,实现生成随机数。

  1. 首先在UI里建立一个QListWidget,objectName改为rand,用于显示生成的随机数。然后建立一个按钮,objectName改为start,用于启动子线程。




  1. 建立类MyThread,基类设为QObject,生成之后注意将继承的父类改为QThread,此处修改类名为Generate不是必要,可根据需要自行更改。





重写run函数,注意增加需要的头文件,代码如下:

MyThread.h


recvNum函数用于接收主线程传过来的需要生成的随机数总数;

SendArray信号用于将生成的随机数传递给主线程


MyThread.cpp


QElapsedTimer

用于计算执行任务所需要的时间,单位是毫秒

mainwindow.cpp



主窗口析构时会发射destroyed信号,此时执行子线程的退出和delete操作。


main.cpp


此处由于QT版本为5.1.2,无法识别Qvector,因此需要注册类型。最新版QT不需要增加这一行代码。


运行结果

运行程序,点击start按钮,显示生成的随机数



应用程序输出当前线程地址以及生成的随机数数量和所需时间。


下期我们介绍下Qt多线程的第二个部分 QObject::moveToThread 的用法

展开阅读全文

页面更新:2024-03-12

标签:随机数   优先级   重写   线程   主线   函数   逻辑   入门   信号   窗口   操作   系列   软件

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top