欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

QT多线程的使用

程序员文章站 2022-06-04 19:05:29
今天给大家介绍三种QT里面使用多线程的方法 1、继承QThread并且重写run方法来实现多线程 2、使用movetothread方法实现多线程,该类一定要继承QObject 3、使用c++11的thread来实现多线程 4、来看一看这三种多线程如何使用 QT里面三种多线程介绍到这里 ......

今天给大家介绍三种qt里面使用多线程的方法

1、继承qthread并且重写run方法来实现多线程

#ifndef myqthread_h
#define myqthread_h

#include <qthread>
class myqthread : public qthread
{
public:
    myqthread();

    void run();
};

#endif // myqthread_h

2、使用movetothread方法实现多线程,该类一定要继承qobject

#ifndef myobjectthread_h
#define myobjectthread_h

#include <qobject>

class myobjectthread : public qobject
{
    q_object
public:
    explicit myobjectthread(qobject *parent = nullptr);

signals:

public slots:
    void showid();
};

#endif // myobjectthread_h

3、使用c++11的thread来实现多线程

#ifndef myc11thread_h
#define myc11thread_h


class myc11thread
{
public:
    myc11thread();

    void showc11id(int i);
};

#endif // myc11thread_h

4、来看一看这三种多线程如何使用

void showid(int i)
{
    qdebug() << "全局函数的现成id" << qthread::currentthreadid() << "i:" << i;
}
mainwindow::mainwindow(qwidget *parent) :
    qmainwindow(parent),
    ui(new ui::mainwindow)
{
    ui->setupui(this);
    //qthread重写runfangfa
    tmpmyqthread = new myqthread();
    tmpmyqthread->start();

    //用movetothread,但是这个类要继承object
    qthread *th = new qthread;
    tmpmyobject = new myobjectthread();
    //把tmpmyobject这个类的对象放到线程中
    tmpmyobject->movetothread(th);
    //通过信号槽的方法,把槽函数运行在线程中
    connect(th,signal(started()),tmpmyobject,slot(showid()));
    th->start();

    //c11原始的thread把全局函数初始化到线程
    std::thread th1(showid,2);
    th1.detach();

    //c11原始thread把类的函数初始化到线程运行
    tmpmyc11 = new myc11thread();
    std::thread th2(&myc11thread::showc11id,tmpmyc11,2);
    th2.detach();
    qdebug() << "mainthread:" << qthread::currentthreadid();
}

 

qt里面三种多线程介绍到这里