多线程
Qt 的多线程操作根据其发展历史,有两种使用方式。
- Qt Version 4.6 以前,通过继承
Thread
类实现。
- Qt Version 4.6 以后,推荐继承
QObject
类实现。
1. 继承 QObject 使用多线程
首先需要创建子线程类(例:MyThread
)
该类需要继承 QObject
类。
生成的 MyThread
类代码如下
MyThread.h |
---|
| #ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QObject>
class MyThread : public QObject
{
Q_OBJECT
public:
explicit MyThread(QObject *parent = 0);
//没有继承 QThread,所以没有run() 函数
//自定义线程处理函数,自己命名
//同样的,也是唯一的线程处理函数,其他函数仍运行在主线程
void myTimeout();
//设置线程开始与结束的标记位
void setFlag(bool flag = true);
signals:
void mySignal();
public slots:
private:
// 标志位
bool isStop;
};
#endif // MYTHREAD_H
|
MyThread.cpp |
---|
| #include "MyThread.h"
#include <QThread>
#include <QDebug>
#include <QMessageBox>
MyThread::MyThread(QObject *parent) : QObject(parent)
{
//线程一开始是要执行的,所以设置为 false ,注意逻辑
isStop = false;
}
void MyThread::myTimeout(){
while(isStop == false){ //如归线程在运行,才继续执行
/*
* 线程中需要执行的代码
*/
//线程函数内部绝对不允许操作图形界面,会报错
//QMessageBox::aboutQt(NULL);
if(true == isStop){ //如果主线程将isstop设置为true,则子线程停止执行,调出while循环
break;
}
}
}
void MyThread::setFlag(bool flag){
isStop = flag;
}
|