QT中的线程使用有两种方法,一种是通过继承QThread,另一种是通过继承QObject,以下通过第一种方式实现,即通过继承QThread来实现。
过程:
1、继承QThread
2、重写虚函数run()
Mythread.h文件
class Mythread : public QThread
{
Q_OBJECT
public:
explicit Mythread(QObject *parent = nullptr);
~Mythread();
protected:
void run();
signals:
void isDone();
private:
};
// MYTHREAD_H
Mythread.cpp文件
Mythread::Mythread(QObject *parent) : QThread(parent)
{
}
Mythread::~Mythread()
{
}
void Mythread::run()
{
this->sleep(5);
emit isDone();
}
本次功能展示中,使用定时器结合线程睡眠的方式使QLcdNumber的数字不断刷新,如果不使用独立开出一条线程出来处理,线程睡眠过程中将导致UI界面卡死。而采用了单独开一条线程出来处理的方式就不会出现UI页面卡死的情况。
完整代码下载路径
https://gitee.com/HGSheng/QT_thread_for_QThread_V1
演示效果
额外补充
线程函数(重写虚函数)
void QThread::run()
启动线程
void QThread::start(Priority priority = InheritPriority)
线程优先级
enum Priority { IdlePriority, LowestPriority, LowPriority, NormalPriority, ..., InheritPriority }
退出线程
void QThread::exit(int returnCode = 0)
杀死线程
void QThread::terminate()
设置线程栈
void QThread::setStackSize(uint stackSize)
等待线程
bool QThread::wait(unsigned long time = ULONG_MAX)
休眠
void msleep(unsigned long msecs)
void sleep(unsigned long secs)
void usleep(unsigned long usecs)