QT中的多线程

目录

1、QThread介绍

1.2、继承Qthread类

1.2.1、得到线程id

1.2.2、让线程一直执行

1.2.3、线程退出

1.2.4、​​​​​​​connect的第五个参数

1.2.5、线程锁 QMutex


​​​​​​​

1、QThread介绍

QThread类提供了一个与平台无关的管理线程的方法。一个QThread对象管理一个线程。QThread的执行从run()函数的执行开始,在Qt自带的QThread类中,run()函数通过调用exec()函数来启动事件循环机制,并且在线程内部处理Qt的事件。在Qt中建立线程的主要目的就是为了用线程来处理那些耗时的后台操作,从而让主界面能及时响应用户的请求操作。

QThread的使用方法有如下两种:

①、QObject::moveToThread()

②、继承QThread类

下面讲解第二种方法

1.2、继承Qthread类

先添加一个C++的文件

QT中的多线程_第1张图片

QT中的多线程_第2张图片

要添加下列句子才能支持信号与槽

QT中的多线程_第3张图片

//定义虚函数run()用来执行线程
protected:
    virtual void fun();

//定义函数设置名字
private:
    QString threadName; 
public:
    void setThreadName(QString);

void MyThread::setThreadName(QString name)
{
    threadName = name;
}

//实现run函数
void MyThread::run()
{
    qDebug()<<"MyThread::run:"<

 对上面的参数进行介绍:

1.2.1、得到线程id

//在之前实现的每一个函数函数中都加上输出,这样就能直到执行这个函数的线程id了
qDebug()<<"函数的名字"<

1.2.2、让线程一直执行

run情况下,就在里面加上一个while(1)一直执行
里面加一个sleep(),让他不要一直占cpu

​​​​​​​1.2.3、线程退出

exit()//退出
wait(1000)	//	等一秒,然后退出

1.2.4、​​​​​​​connect的第五个参数

 这个参数在线程中才用的到,表示线程的一个连接方式

QT中的多线程_第4张图片 一般的话,就是自动连接,也就是第五个参,不用填。

1.2.5、线程锁 QMutex

        用线程还是会遇到访问共同资源的问题,如果遇到还是需要锁

        QMutex类提供了一种保护一个变量或者一段代码的方法,这样可以每次只让一个线程访问它。这个  类提供了一个lock()函数用于锁住互斥量,如果互斥量是解锁状态,那么当前线程立即占用并锁定它;否则,当前线程会阻塞,直到这个互斥量的线程对它解锁为止。QMutex类还提供了一个tryLock()函数, 如果该互斥量已经锁定,它就会立即返回。

void MyThread::run()
{
    qDebug()<<"MyThread::run"<

你可能感兴趣的:(QT学习,qt,开发语言)