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 © 2024
京ICP备05028076号