亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一、線程基礎(chǔ)

1、GUI線程與工作線程

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

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

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

二、QT多線程簡介

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

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

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

三、QThread線程

1、QThread線程基礎(chǔ)

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

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

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

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

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

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

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

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

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

四、簡單實例

1、建立工程

2、設(shè)計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();
}

運行效果

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

相關(guān)文章

  • 正確理解C++的構(gòu)造函數(shù)和析構(gòu)函數(shù)

    正確理解C++的構(gòu)造函數(shù)和析構(gòu)函數(shù)

    在C++的學(xué)習中,可以把類當作一個模具,類實例化出來的對象就是根據(jù)這個模具所產(chǎn)生的實體,對象看作是自己創(chuàng)建的一個新的數(shù)據(jù)類型。本文主要介紹了類對象通過拷貝函數(shù)進行初始化,分析類對象的內(nèi)存模型,以及通過this指針實現(xiàn)更復(fù)雜的功能。最后介紹了析構(gòu)函數(shù)的基礎(chǔ)知識
    2021-06-06
  • 位運算實現(xiàn)十進制轉(zhuǎn)換為二進制

    位運算實現(xiàn)十進制轉(zhuǎn)換為二進制

    這篇文章主要介紹了位運算實現(xiàn)十進制轉(zhuǎn)換為二進制的相關(guān)資料,需要的朋友可以參考下
    2015-03-03
  • 實例講解C++設(shè)計模式編程中State狀態(tài)模式的運用場景

    實例講解C++設(shè)計模式編程中State狀態(tài)模式的運用場景

    這篇文章主要介紹了實例講解C++設(shè)計模式編程中State狀態(tài)模式的運用場景,文章最后的適用性部分則介紹了一些State模式善于處理的情況,需要的朋友可以參考下
    2016-03-03
  • VS2010+Opencv+MFC讀取圖像和視頻顯示在Picture控件

    VS2010+Opencv+MFC讀取圖像和視頻顯示在Picture控件

    這篇文章主要為大家詳細介紹了VS2010+Opencv+MFC讀取圖像和視頻顯示在Picture控件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • C++實現(xiàn)簡單的生產(chǎn)者-消費者隊列詳解

    C++實現(xiàn)簡單的生產(chǎn)者-消費者隊列詳解

    這篇文章主要為大家詳細介紹了如何利用C++實現(xiàn)一個簡單的生產(chǎn)者-消費者隊列,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-04-04
  • QT連接Mysql數(shù)據(jù)庫的實現(xiàn)步驟

    QT連接Mysql數(shù)據(jù)庫的實現(xiàn)步驟

    本文主要介紹了QT連接Mysql數(shù)據(jù)庫的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2022-06-06
  • C語言所有經(jīng)典排序方法的實現(xiàn)代碼

    C語言所有經(jīng)典排序方法的實現(xiàn)代碼

    這篇文章給大家分享C語言所有經(jīng)典排序方法,文章給大家提供完整的實例代碼幫助大家快速學(xué)習掌握C語言排序方法,感興趣的朋友一起看看吧
    2021-06-06
  • C++實現(xiàn)控制臺隨機迷宮的示例代碼

    C++實現(xiàn)控制臺隨機迷宮的示例代碼

    本文主要介紹了C++實現(xiàn)控制臺隨機迷宮的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C語言實現(xiàn)員工工資管理系統(tǒng)

    C語言實現(xiàn)員工工資管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)員工工資管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C語言中的getchar()使用詳解

    C語言中的getchar()使用詳解

    大家好,本篇文章主要講的是C語言中的getchar()使用詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01

最新評論