QT  - 讨论区

标题:Qt Tutorial 011:使用QThread 实现并发

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

参考资料:

https://qt-project.org/doc/qt-5.0/qtcore/qthread.html

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号