2014年02月27日 星期四 17:32
QThread是相对来说比较底层的线程对象,可以更加精细的控制程序并发执行的情况。一般来说,线程间通讯是必不可少的,Qt提供了Signal/Slot机制来协助程序员正确的处理线程间通讯的问题。
本实例稍微复杂一些,代码分为三部分:
主程序框架(main.cpp):
#include <QCoreApplication>
#include <QThread>
#include <QDebug>
#include "test.h"
#include "sumthread.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
SumThread t1(50);
t1.start();
qDebug() << t1.isRunning();
t1.wait();
qDebug() << t1.isFinished();
qDebug() << t1.get_result();
Test *t=new Test();
t->run();
return a.exec();
}
线程实现部分代码(sumthread.h):
#ifndef SUMTHREAD_H
#define SUMTHREAD_H
#include <QThread>
#include <QObject>
class SumThread : public QThread {
Q_OBJECT
public:
SumThread(int iend) : end(iend){}
void run(){
for(int i=0;i<=end;i++){
result+=i;
msleep(10);
}
emit resultReady(result);
}
int get_result(){
return result;
}
signals:
void resultReady(int result);
private:
int end=0;
int result=0;
};
#endif // SUMTHREAD_H
作为辅助粘合的test对象(test.h):
#ifndef TEST_H
#define TEST_H
#include <QObject>
#include <QDebug>
#include "sumthread.h"
class Test : public QObject {
Q_OBJECT
public:
Test(){}
void run(){
SumThread *t1=new SumThread(100);
connect(t1,SIGNAL(resultReady(int)),this,SLOT(printResult(int)));
connect(t1,SIGNAL(finished()),t1,SLOT(deleteLater()));
t1->start();
t1->wait();
}
public slots:
void printResult(int result){
qDebug() << result;
}
};
#endif // TEST_H
参考资料:
Zeuux © 2025
京ICP备05028076号