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

QT實現(xiàn)多線程兩種方式案例詳解

 更新時間:2021年08月18日 10:19:49   作者:去留意  
這篇文章主要介紹了QT實現(xiàn)多線程兩種方式案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下

Qt線程

Qt4.7之前版本處理步驟

1.自定義一個類,繼承于QThread。

class MyThread:public QThread{
public:
    vid run();	//虛函數(shù)  線程處理函數(shù)(和主線程不在同一個線程)
    
signals:
    void isDone();	//信號 線程執(zhí)行完發(fā)送
}
void MyThread::run() {
    // 實現(xiàn)  -- 復(fù)雜的處理過程
    
    emit isDome;	// 發(fā)送線程
};

2.定義線程

MyThread thread;

3.開啟線程

thread.start();

不能通過直接調(diào)用run()函數(shù),通過start()函數(shù)間接調(diào)用run()函數(shù)。

4.自定義線程結(jié)束槽函數(shù)

public:
	void dealDone();
——————————————————————
void Widget::dealDone(){
    // 線程結(jié)束后的操作
}

5.綁定線程結(jié)束信號和線程結(jié)束槽

connect(&thread,&MyThread::isDone,this,&Widget::dealDone);

6.定義線程關(guān)閉槽函數(shù)

void Widget::stopThread(){
    // 停止線程
    thread->quit();
    // 等待線程運行完成之后結(jié)束
    thread->wait();
}

建議不要使用terminate()容易出現(xiàn)內(nèi)存問題

建議使用quit()

7.綁定窗口關(guān)閉信號和線程關(guān)閉槽函數(shù)

connect(this,&Widget::destroyed,this,&Widget::stopThread);

新用法處理步驟

1.設(shè)定一個類,繼承于QObject。

2.類中設(shè)置一個線程函數(shù)(只有一個函數(shù)是線程函數(shù))和線程開始信號。

class MyThread : public QObject
{
    Q_OBJECT
public:
    explicit MyThread(QObject *parent = nullptr);

    void run();
    void start();
    void stop();

signals:
    void myThreadrun();

private:
    bool isrun;
public slots:
};
void MyThread::run(){
    while(isrun == true) {
        QThread::sleep(1);
        emit myThreadrun();
        qDebug() << "子線程:" << QThread::currentThread();
        if(isrun == false) break;
    }
}
void MyThread::start() {
    qDebug() << "開始";
    this->isrun = true;
}

void MyThread::stop(){
    qDebug() << "停止";
    this->isrun = false;
}

3.創(chuàng)建線程對象(不能指定對象)和 QThread子線程對象

MyThread *mythread;
QThread *thread;
-------------------------------------------------------------------------------------------
this->mythread = new MyThread;
this->thread = new QThread(this);

4.處理事件、鼠標按下開啟和關(guān)閉事件、窗口關(guān)閉事件處理

void Widget::dealThread() {
    static int i = 0;
    i++;
    ui->lcdNumber->display(i);
}
void Widget::on_pushButton_strat_clicked()
{
    if(thread->isRunning() == true){
        return;
    }
    thread->start();
    mythread->start();
    emit runThread();

}
void Widget::on_pushButton_stop_clicked()
{
    if(thread->isRunning() == false){
        return;
    }
    mythread->stop();
    thread->quit();
    thread->wait();
}
void Widget::dealThreadclose() {
    on_pushButton_stop_clicked();
    delete mythread;
}

5.把自定義線程類加到子線程

mythread->moveToThread(thread);
connect(mythread,&MyThread::myThreadrun,this,&Widget::dealThread);

6. 啟動子線程,只是把線程啟動了,并沒有啟動線程處理函數(shù)。

```C++
connect(mythread,&MyThread::myThreadrun,this,&Widget::dealThread);
connect(this,&Widget::runThread,mythread,&MyThread::run);
qDebug() << "主線程:" << QThread::currentThread();
connect(this,&Widget::destroyed,this,&Widget::dealThreadclose);

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

相關(guān)文章

  • 一文帶你搞懂C語言預(yù)處理宏定義

    一文帶你搞懂C語言預(yù)處理宏定義

    這篇文章主要為大家詳細介紹了C語言預(yù)處理宏定義#define,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-10-10
  • C++學(xué)習進階篇之類大小計算和this指針

    C++學(xué)習進階篇之類大小計算和this指針

    this是C++中的一個關(guān)鍵字,也是一個const指針,它指向當前對象,通過它可以訪問當前對象的所有成員,下面這篇文章主要給大家介紹了關(guān)于C++學(xué)習進階篇之類大小計算和this指針的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • C語言中嵌入Lua解釋器的方法詳解

    C語言中嵌入Lua解釋器的方法詳解

    Lua語言是一個輕量的腳本語言,可以用很少的資源運行其解釋器,這篇文章主要為大家介紹了如何在C語言中嵌入Lua解釋器的方法,希望對大家有所幫助
    2024-05-05
  • C++20 新特性 協(xié)程 Coroutines(2)

    C++20 新特性 協(xié)程 Coroutines(2)

    上篇文章簡單給大介紹了 C++20 特性 協(xié)程 Coroutines co_yield 和 co_return 那么這篇文章繼續(xù)給大家介紹C++20 的新特性協(xié)程 Coroutines co_await,需要的朋友可以參考一下
    2021-10-10
  • C/C++實操True and false詳解

    C/C++實操True and false詳解

    這篇文章主要給大家介紹了關(guān)于Python中常用的數(shù)據(jù)類型bool(布爾)類型的兩個值:True和False的相關(guān)資料,通過示例代碼給大家進行了解惑,讓對這兩個值有所疑惑的朋友們能有起到一定的幫助,需要的朋友下面來一起看看吧。
    2021-09-09
  • sigsetjmp的用法總結(jié)

    sigsetjmp的用法總結(jié)

    sigsetjmp()會保存目前堆棧環(huán)境,然后將目前的地址作一個記號,而在程序其他地方調(diào)用siglongjmp()時便會直接跳到這個記號位置,然后還原堆棧,繼續(xù)程序的執(zhí)行
    2013-09-09
  • C++名稱空間特性

    C++名稱空間特性

    這篇文章主要介紹了C++名稱空間特性,文章圍繞C++名稱空間特性的相關(guān)資料展開詳細內(nèi)容,需要的小伙伴可以參考一下下文具體內(nèi)容,希望對你的學(xué)習有所幫助
    2022-01-01
  • C++ 中RTTI的使用方法詳解

    C++ 中RTTI的使用方法詳解

    這篇文章主要介紹了C++ 中RTTI的使用方法詳解的相關(guān)資料,希望通過本文大家能理解使用RTTI,需要的朋友可以參考下
    2017-09-09
  • C++超詳細講解邏輯操作符

    C++超詳細講解邏輯操作符

    在C語言中,邏輯運算符有&&、||、!;&&表示“與”的意思,需要兩端的表達式的值都為true,該式的值才為true。||表示“或”的意思,兩端的表達式的值只要有一端為true,該式的值就為true。!表示“非”的意思,將該式的真值換成相反的真值,即false和true互換
    2022-06-06
  • C++編程中new運算符的使用學(xué)習教程

    C++編程中new運算符的使用學(xué)習教程

    這篇文章主要介紹了C++編程中new運算符的使用學(xué)習教程,是C++入門學(xué)習中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-01-01

最新評論