QT多线程的使用

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

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

 1 #ifndef MYQTHREAD_H
 2 #define MYQTHREAD_H
 3 #include <QMutex>
 4 #include <QThread>
 5 class myQThread : public QThread
 6 {
 7 public:
 8 myQThread()
 9 {
10     _isRunning = false;
11 }
12 void run()
13 {
14     while(true)
15     {
16         _mutex.lock();
17         if(!_isRunning)
18         {
19             qDebug() << "myqthread" << QThread::currentThreadId();
20         }else
21         {
22             _mutex.unlock();
23             break;
24         }
25         _mutex.unlock();
26         QThread::msleep(2000);
27     }
28     _isRunning = false;
29 }
30 void stop()
31 {
32     _mutex.lock();
33     _isRunning = true;
34     _mutex.unlock();
35     this->quit();
36     this->wait();
37 }
38 
39     volatile bool _isRunning;
40     QMutex _mutex;
41 };
42 
43 #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里面三种多线程介绍到这里

转载于:https://www.cnblogs.com/xupeidong/p/9487646.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值