最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Qt中線程的使用方法

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

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

要使用線程要經(jīng)過(guò)一下四個(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();

下面來(lái)看看線程使用的具體列子:

線程頭文件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)類(lèi)
    static QSemaphore *sp_A;
    static QSemaphore *sp_B;
private slots:
    void on_pushButton_clicked();

private:
    Ui::ThreadQt *ui;

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

};

#endif // THREADQT_H

源文件hdthread.cpp:

#include "hdthread.h"
#include <QDebug>
#include <threadqt.h>
HDTHread::HDTHread(QMutex *mtex, QObject *parent):QThread(parent)//構(gòu)造函數(shù),用來(lái)初始化
{
    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();//開(kāi)啟線程
 
    writethread = new WriteFile(&mutex);
    writethread->setLabel(ui->label);
    writethread->start();
}

大家也看到了,此處的線程也用到了互斥鎖(信號(hào)量)保證線程讀寫(xiě)數(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)文章

  • C++11中列表初始化機(jī)制的概念與實(shí)例詳解

    C++11中列表初始化機(jī)制的概念與實(shí)例詳解

    在我們實(shí)際編程中,我們經(jīng)常會(huì)碰到變量初始化的問(wèn)題,對(duì)于不同的變量初始化的手段多種多樣,下面這篇文章主要給大家介紹了關(guān)于C++11中列表初始化機(jī)制的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • C++編程中new運(yùn)算符的使用學(xué)習(xí)教程

    C++編程中new運(yùn)算符的使用學(xué)習(xí)教程

    這篇文章主要介紹了C++編程中new運(yùn)算符的使用學(xué)習(xí)教程,是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-01-01
  • 解析wprintf 中使用%I64d格式化輸出LONGLONG的詳細(xì)介紹

    解析wprintf 中使用%I64d格式化輸出LONGLONG的詳細(xì)介紹

    本篇文章是對(duì)wprintf 中使用%I64d格式化輸出LONGLONG進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++常見(jiàn)錯(cuò)誤中英文對(duì)照表

    C++常見(jiàn)錯(cuò)誤中英文對(duì)照表

    對(duì)于剛學(xué)編程,剛接觸C++的新手來(lái)說(shuō),編譯運(yùn)行報(bào)錯(cuò)是最頭疼的一件事,爆出一堆英文,英語(yǔ)差一點(diǎn)的又不知道什么意思,所以也不知道如何去改,在此,我給大家傳一份常見(jiàn)錯(cuò)誤中英文對(duì)照表及簡(jiǎn)單解釋?zhuān)M梢詭偷酱蠹?/div> 2016-05-05
  • C++常量詳解一(常量指針與常量引用的初始化)

    C++常量詳解一(常量指針與常量引用的初始化)

    這篇文章主要介紹了C++常量詳解一(常量指針與常量引用的初始化),需要的朋友可以參考下
    2017-06-06
  • Qt調(diào)用MATLAB引擎混合編程的過(guò)程詳解

    Qt調(diào)用MATLAB引擎混合編程的過(guò)程詳解

    這篇文章給大家介紹了Qt調(diào)用MATLAB引擎混合編程的全過(guò)程,文中通過(guò)圖文結(jié)合的方式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • C語(yǔ)言實(shí)現(xiàn)電話簿管理系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)電話簿管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)電話簿管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • c++ 基于opencv 識(shí)別、定位二維碼

    c++ 基于opencv 識(shí)別、定位二維碼

    這篇文章主要介紹了c++ 基于opencv 識(shí)別、定位二維碼,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下
    2021-03-03
  • C++面試八股文之左值與右值

    C++面試八股文之左值與右值

    簡(jiǎn)單來(lái)說(shuō),左值就是可以使用&符號(hào)取地址的值,而右值一般不可以使用&符號(hào)取地址,這篇文章主要來(lái)和大家講講面試中左值與右值常考的知識(shí)點(diǎn),需要的可以參考一下
    2023-06-06
  • C++抽象數(shù)據(jù)類(lèi)型介紹

    C++抽象數(shù)據(jù)類(lèi)型介紹

    這篇文章主要介紹了C++抽象數(shù)據(jù)類(lèi)型,我們?cè)趯W(xué)數(shù)據(jù)結(jié)構(gòu)的時(shí)候,經(jīng)常遇到的一個(gè)概念就是抽象數(shù)據(jù)類(lèi)型(Abstract Data Type),簡(jiǎn)稱(chēng)ADT。下面我們就對(duì)ADT作更多介紹,需要的朋友可以參考一下
    2022-01-01

最新評(píng)論

噶尔县| 临海市| 马龙县| 刚察县| 斗六市| 文登市| 修水县| 修水县| 宣武区| 西乌珠穆沁旗| 平和县| 平昌县| 威信县| 乳山市| 洪湖市| 恭城| 驻马店市| 秀山| 迭部县| 嘉定区| 凤山县| 镇原县| 白水县| 怀柔区| 钟山县| 任丘市| 涞水县| 延寿县| 洞头县| 衢州市| 岳池县| 阿巴嘎旗| 墨江| 台东县| 资溪县| 桂阳县| 含山县| 突泉县| 崇仁县| 汝州市| 赫章县|