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

Qt5多線程編程的實(shí)現(xiàn)

 更新時(shí)間:2021年12月14日 15:39:46   作者:fjqlldg  
Qt通過三種形式提供了對(duì)線程的支持,本文主要介紹了Qt5多線程編程的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、線程基礎(chǔ)

1、GUI線程與工作線程

每個(gè)程序啟動(dòng)后擁有的第一個(gè)線程稱為主線程,即GUI線程。QT中所有的組件類和幾個(gè)相關(guān)的類只能工作在GUI線程,不能工作在次線程,次線程即工作線程,主要負(fù)責(zé)處理GUI線程卸下的工作。

2、數(shù)據(jù)的同步訪問

每個(gè)線程都有自己的棧,因此每個(gè)線程都要自己的調(diào)用歷史和本地變量。線程共享相同的地址空間。

二、QT多線程簡(jiǎn)介

????Qt通過三種形式提供了對(duì)線程的支持,分別是平臺(tái)無關(guān)的線程類、線程安全的事件投遞、跨線程的信號(hào)-槽連接。

????Qt中線程類包含如下:

  • QThread?提供了跨平臺(tái)的多線程解決方案
  • QThreadStorage?提供逐線程數(shù)據(jù)存儲(chǔ)
  • QMutex?提供相互排斥的鎖,或互斥量
  • QMutexLocker?是一個(gè)輔助類,自動(dòng)對(duì)?QMutex?加鎖與解鎖
  • QReadWriterLock?提供了一個(gè)可以同時(shí)讀操作的鎖
  • QReadLocker與QWriteLocker?自動(dòng)對(duì)QReadWriteLock?加鎖與解鎖
  • QSemaphore?提供了一個(gè)整型信號(hào)量,是互斥量的泛化
  • QWaitCondition?提供了一種方法,使得線程可以在被另外線程喚醒之前一直休眠。

三、QThread線程

1、QThread線程基礎(chǔ)

????QThread是Qt線程中有一個(gè)公共的抽象類,所有的線程類都是從QThread抽象類中派生的,需要實(shí)現(xiàn)QThread中的虛函數(shù)run(),通過start()函數(shù)來調(diào)用run函數(shù)。

????void run()函數(shù)是線程體函數(shù),用于定義線程的功能。

????void start()函數(shù)是啟動(dòng)函數(shù),用于將線程入口地址設(shè)置為run函數(shù)。

????void terminate()函數(shù)用于強(qiáng)制結(jié)束線程,不保證數(shù)據(jù)完整性和資源釋放。

????QCoreApplication::exec()總是在主線程(執(zhí)行main()的線程)中被調(diào)用,不能從一個(gè)QThread中調(diào)用。在GUI程序中,主線程也稱為GUI線程,是唯一允許執(zhí)行GUI相關(guān)操作的線程。另外,必須在創(chuàng)建一個(gè)QThread前創(chuàng)建QApplication(or QCoreApplication)對(duì)象。

????當(dāng)線程啟動(dòng)和結(jié)束時(shí),QThread會(huì)發(fā)送信號(hào)started()和finished(),可以使用isFinished()和isRunning()來查詢線程的狀態(tài)。

????從Qt4.8起,可以釋放運(yùn)行剛剛結(jié)束的線程對(duì)象,通過連接finished()信號(hào)到QObject::deleteLater()槽。?
????使用wait()來阻塞調(diào)用的線程,直到其它線程執(zhí)行完畢(或者直到指定的時(shí)間過去)。

????靜態(tài)函數(shù)currentThreadId()和currentThread()返回標(biāo)識(shí)當(dāng)前正在執(zhí)行的線程。前者返回線程的ID,后者返回一個(gè)線程指針。

要設(shè)置線程的名稱,可以在啟動(dòng)線程之前調(diào)用setObjectName()。如果不調(diào)用setObjectName(),線程的名稱將是線程對(duì)象的運(yùn)行時(shí)類型(QThread子類的類名)。

四、簡(jiǎn)單實(shí)例

1、建立工程

2、設(shè)計(jì)ui及控件、控件屬性

3、添加工作線程

建立頭文件workthread.h

在右側(cè)添加如下代碼

#include <QThread>
 
class WorkThread : public QThread
{
    Q_OBJECT
 
public:
    WorkThread();
 
protected:
    void run();
};

4、添加workthread.cpp文件

在右側(cè)添加如下代碼:

重寫run()函數(shù)

重寫run()函數(shù)

#include "workthread.h"
#include <QtDebug>
 
WorkThread::WorkThread()
{
 
}
 
void WorkThread::run()
{
    while (true)
    {
        for ( int n = 0; n < 10; n++ )
        {
            qDebug()<<n<<n<<n<<n<<n<<n<<n<<n;
        }
    }
}

5、在threaddlg.h中添加如下內(nèi)容:

#include "workthread.h"
#define MAXSIZE 1
 
 
 
public slots:
    void slotStart();
    void slotStop();
    void slotExit();
 
private:
 
    WorkThread *workThread[MAXSIZE];

?6、在threaddlg.cpp中完成槽函數(shù)功能

    connect(ui->startBtn,   SIGNAL(clicked(bool)),this, SLOT(slotStart()));
    connect(ui->stopBtn,    SIGNAL(clicked(bool)),this, SLOT(slotStop()));
    connect(ui->exitBtn,    SIGNAL(clicked(bool)),this, SLOT(slotExit()));
 
void threadDlg::slotStart()
{
    for ( int i = 0; i < MAXSIZE; i++ )
    {
        workThread[i] = new WorkThread();
    }
 
    for ( int i = 0; i < MAXSIZE; i++ )
    {
        workThread[i]->start();
    }
 
    ui->startBtn->setEnabled(false);
    ui->stopBtn->setEnabled(true);
}
void threadDlg::slotStop()
{
    for ( int i = 0; i < MAXSIZE; i++ )
    {
        workThread[i]->terminate();
        workThread[i]->wait();
    }
 
    ui->startBtn->setEnabled(true);
    ui->stopBtn->setEnabled(false);
}
void threadDlg::slotExit()
{
    this->close();
}

運(yùn)行效果

到此這篇關(guān)于Qt5多線程編程的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Qt5多線程 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言實(shí)現(xiàn)哈夫曼樹

    C語言實(shí)現(xiàn)哈夫曼樹

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)哈夫曼樹,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Cocos2d-x保存用戶游戲數(shù)據(jù)之XML文件是否存在問題判斷方法

    Cocos2d-x保存用戶游戲數(shù)據(jù)之XML文件是否存在問題判斷方法

    這篇文章主要介紹了Cocos2d-x保存用戶游戲數(shù)據(jù)之XML文件是否存在問題判斷方法,請(qǐng)注意代碼中包含大量注釋,需要的朋友可以參考下
    2014-09-09
  • C++指針 詳細(xì)介紹及總結(jié)

    C++指針 詳細(xì)介紹及總結(jié)

    這篇文章主要介紹了C++指針 詳細(xì)介紹及總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • 詳解C++ 拷貝構(gòu)造函數(shù)

    詳解C++ 拷貝構(gòu)造函數(shù)

    這篇文章主要介紹了C++ 拷貝構(gòu)造函數(shù)的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 詳解C++?STL模擬實(shí)現(xiàn)vector

    詳解C++?STL模擬實(shí)現(xiàn)vector

    這篇文章主要為大家詳細(xì)介紹了C++如何模擬實(shí)現(xiàn)STL容器vector,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C++有一定幫助,需要的可以參考一下
    2023-01-01
  • Qt 使用 canon edsdk 實(shí)現(xiàn)實(shí)時(shí)預(yù)覽的示例代碼

    Qt 使用 canon edsdk 實(shí)現(xiàn)實(shí)時(shí)預(yù)覽的示例代碼

    這篇文章主要介紹了Qt 使用 canon edsdk 實(shí)現(xiàn)實(shí)時(shí)預(yù)覽的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • C++中putchar與getchar函數(shù)的細(xì)節(jié)及運(yùn)用

    C++中putchar與getchar函數(shù)的細(xì)節(jié)及運(yùn)用

    C語言提供putchar函數(shù),用于給終端輸出一個(gè)字符;getchar函數(shù),可以從終端接收用戶輸入的一個(gè)字符,本文給大家分享C++中putchar與getchar函數(shù)的細(xì)節(jié)及運(yùn)用,感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • C++中inline函數(shù)詳解

    C++中inline函數(shù)詳解

    inline函數(shù)的定義:在函數(shù)聲明或定義中函數(shù)返回類型前加上關(guān)鍵字inline,即可以把函數(shù)指定為內(nèi)聯(lián)函數(shù)。inline函數(shù)對(duì)編譯器而言必須是可見的,以便它能夠在調(diào)用點(diǎn)展開該函數(shù)。
    2015-07-07
  • 詳解C/C++中const限定符總結(jié)

    詳解C/C++中const限定符總結(jié)

    const是一種限定符,被const所限定的變量其值不可以被改變。。這篇文章主要介紹了C/C++中const限定符總結(jié),通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 用C語言獲取文件的大小示例分享

    用C語言獲取文件的大小示例分享

    在linux下獲取一個(gè)指定文件大?。ㄗ止?jié)為單位)的代碼。查了一下發(fā)現(xiàn)是使用系統(tǒng)調(diào)用stat來實(shí)現(xiàn),那么如何使用C語言或C++語言來寫一個(gè)通用的函數(shù)來獲取指定文件大小的函數(shù)呢?
    2014-08-08

最新評(píng)論

大名县| 台东市| 沁源县| 博客| 中方县| 信丰县| 阳城县| 达拉特旗| 山阴县| 石门县| 旅游| 漳平市| 株洲县| 广东省| 洱源县| 图木舒克市| 巴林左旗| 彰化市| 明水县| 灵寿县| 神木县| 永济市| 伊宁市| 高雄市| 轮台县| 自治县| 应城市| 通州区| 丰原市| 阳谷县| 新晃| 泰兴市| 柳州市| 文安县| 云林县| 韶关市| 兴城市| 吉水县| 盐池县| 长岛县| 岑巩县|