QT 线程 QThread
方式
1.Qt 4.7之前的线程实现方式
1.1 自定义一个类,继承于QThread
class MyThread: pubilc QThread
{
public:
void run();// 才是线程处理函数(和主线程不在同一个线程)
}
void MyThread::run(){
//!复杂的处理
}
[^注]: 不能直接调用 run(),使用start() 间接调用 run().
如:
MyThread thread;
//!启动线程
thread.start();
2.最新线程实现方式
设定流程
2.1 设定一个类,继承于QObject
2.2 类中设置一个线程函数(只有一个是线程函数)
class MyThread:public QObject
{
Q_OBJECT
public slots:
void myTimer(){
while(1){
emit mySignal();
}
}
signals:
void startThread();
}
使用流程
1.创建线程对象(不能指定父对象)
MyThread *myT = MyThread;
2.QThread 子线程对象
QThread * thread = new QThread(this);
3.把自定义线程类,加入到子线程
myT->moveToThread(thread);
a.直接使用 thread.start() 启动子线程,只能把线程开启了,并没有启动线程处理函数
b.不能直接调用线程处理函数–>直接调用导致线程处理函数和主线程在同一线程。
b.线程函数的启动,必须通过 signal - slot
connect(this,&MyThread::startThread,myT,&MyThread::myTimer);
即:先 thread.start() 然后 emit startThread();