首先引用Bruce Eckel的一句话,“理解线程的概念,应该用面向过程编程的思路去理解,而不应该用面向对象编程的思路去理解”。
然后,上两段代码:
1、会发生槽调用的代码
//ThreadSlotTest.h
#ifndef THREADSLOTTEST_H
#define THREADSLOTTEST_H
#include <QThread>
#include <QTimer>
#include <iostream>
using namespace std;
class ThreadSlotTest:public QThread{
Q_OBJECT
private:
QTimer timer;
public:
//
ThreadSlotTest(){
moveToThread(this);
timer.setInterval(1000);
timer.start();
connect(&timer,SIGNAL(timeout()),this,SLOT(slot1()));
}
//
void run(){
exec();//exec会让线程卡在这句话上,不会往下执行(除非调用exit或quit)
}
public slots:
void slot1(){cout<<"slot1:"<<currentThreadId()<<endl;}
};
#endif // THREADSLOTTEST_H
//main.cpp
#include <QtGui/QApplication>
#include <iostream>
#include "ThreadSlotTest.h"
using namespace std;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
cout&