欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Qt中線程的使用方法

 更新時(shí)間:2022年12月16日 08:16:57   作者:音視頻開發(fā)老舅  
這篇文章主要為大家詳細(xì)介紹了Qt中線程的使用方法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Qt有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下

QT中使用線程可以提高工作效率。

要使用線程要經(jīng)過一下四個(gè)步驟:

(1)先創(chuàng)建一個(gè)c++ class文件,記得繼承Thread,創(chuàng)建步驟如下:

a、第一步

b、第二步

(2)自定義一個(gè)run函數(shù),以后啟動(dòng)線程的時(shí)候,程序就會(huì)跳轉(zhuǎn)到run函數(shù)中

void run();

(3)初始化線程

HDThread mythread = new HDThread();

(4)啟動(dòng)線程

mythread->start();

下面來看看線程使用的具體列子:

線程頭文件hdthread.h:

#ifndef HDTHREAD_H
#define HDTHREAD_H
#include <QThread>
#include <QLabel>
#include <QMutex>

class HDTHread : public QThread
{
public:
    HDTHread(QMutex* mtex,QObject *parent = 0);
    void run();//自定義的run函數(shù)
    void setLabel(QLabel *lb);
private:
    QLabel *label;
    QMutex *mutex; //互斥鎖
};

#endif // HDTHREAD_H

主函數(shù)的頭文件threadqt.h

#ifndef THREADQT_H
#define THREADQT_H

#include <QMainWindow>
#include <hdthread.h>
#include <writefile.h>
#include <QMutex>
#include <QSemaphore>

namespace Ui {
class ThreadQt;
}

class ThreadQt : public QMainWindow
{
    Q_OBJECT

public:
    explicit ThreadQt(QWidget *parent = 0);
    ~ThreadQt();

     //定義靜態(tài)的信號(hào)類
    static QSemaphore *sp_A;
    static QSemaphore *sp_B;
private slots:
    void on_pushButton_clicked();

private:
    Ui::ThreadQt *ui;

    HDTHread *thread; //hdtread類,里面繼承了線程
    WriteFile *writethread;
    QMutex mutex;//定義互斥鎖類

};

#endif // THREADQT_H

源文件hdthread.cpp:

#include "hdthread.h"
#include <QDebug>
#include <threadqt.h>
HDTHread::HDTHread(QMutex *mtex, QObject *parent):QThread(parent)//構(gòu)造函數(shù),用來初始化
{
    this->mutex = mtex;
}
void HDTHread::setLabel(QLabel *lb)
{
    this->label = lb;
}
 
void HDTHread::run() //啟動(dòng)線程時(shí)執(zhí)行的函數(shù)
{
    while(true)
    {
 
        qint64 data = qrand()%1000; //取隨機(jī)數(shù)
        //this->mutex->lock();//上鎖
        ThreadQt::sp_A->acquire();//請(qǐng)求信號(hào)
        this->label->setText(QString::number(data));
         sleep(1);
        ThreadQt::sp_B->release();//釋放信號(hào)
        //this->mutex->unlock();//解鎖
 
        qDebug()<<"hello Qt"<<data;
    }
}

源文件threadqt.cpp

#include "threadqt.h"
#include "ui_threadqt.h"
 
//初始化靜態(tài)變量
 QSemaphore *ThreadQt::sp_A = NULL;
 QSemaphore *ThreadQt::sp_B = NULL;
 
ThreadQt::ThreadQt(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::ThreadQt)
{
    ui->setupUi(this);
    //創(chuàng)建信號(hào)對(duì)象
    sp_A = new QSemaphore(1);
    sp_B = new QSemaphore(0);
 
}
 
ThreadQt::~ThreadQt()
{
    delete ui;
}
 
void ThreadQt::on_pushButton_clicked()
{
    thread = new HDTHread(&mutex); //初始化線程
    thread->setLabel(ui->label);
    thread->start();//開啟線程
 
    writethread = new WriteFile(&mutex);
    writethread->setLabel(ui->label);
    writethread->start();
}

大家也看到了,此處的線程也用到了互斥鎖(信號(hào)量)保證線程讀寫數(shù)據(jù)時(shí)不出現(xiàn)錯(cuò)誤,這里大家可以看一下具體實(shí)現(xiàn)的代碼

this->mutex->lock();//上鎖
ThreadQt::sp_A->acquire();//請(qǐng)求信號(hào)
this->label->setText(QString::number(data));
sleep(1);
ThreadQt::sp_B->release();//釋放信號(hào)
this->mutex->unlock();//解鎖

到此這篇關(guān)于詳解Qt中線程的使用方法的文章就介紹到這了,更多相關(guān)Qt線程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論