国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

qt創(chuàng)建線程的兩種方法

這篇具有很好參考價值的文章主要介紹了qt創(chuàng)建線程的兩種方法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

第一種:繼承QThread類

方法描述
1。類MyThread繼承QThread,
2。重載MyThread中的run()函數(shù),在run()函數(shù)中寫入需要執(zhí)行的工作;
3。調(diào)用start()函數(shù)來啟動線程。

不是真的跨線程,子線程ID和主線程ID是同一個

QThread的原理:
1.重寫了QThread中的run()函數(shù),在run()函數(shù)中定義了需要的工作。
2.我們自定義的子線程調(diào)用start()函數(shù)后,便開始執(zhí)行run()函數(shù)。
3.run()函數(shù)是由主線程執(zhí)行。
如果你不信:
子類化的線程的槽函數(shù)中輸出當前線程的ID,而這個ID居然是主線程的ID!!
子類化的QThread只能執(zhí)行run()函數(shù)中的任務直到run()函數(shù)退出,而它的槽函數(shù)根本不會被自己的線程執(zhí)行。

第二種:QObject::moveToThread

方法描述:
1。worker類繼承QObject
2.在worker類中定義一個槽slot函數(shù)doWork(),這個函數(shù)中定義線程需要做的工作;
3.主線程中,新建一個Controller 繼承QThread的對象,使用moveToThread()方法將worker對象的事件循環(huán)全部交由Controller對象處理;
4.建立相關的信號函數(shù)和槽函數(shù)進行連接,然后發(fā)出信號觸發(fā)QThread的槽函數(shù),使其執(zhí)行工作。

這就是我要的子線程

#ifndef WORKER_H
#define WORKER_H
#include <QObject>
#include<QDebug>
#include<QThread>
class Worker:public QObject                 
{
    Q_OBJECT
public:
    Worker(QObject* parent = nullptr){}
public slots:
    void doWork(int parameter)                        //doWork定義了線程要執(zhí)行的操作
    {
   		qDebug()<<"hello start";
   		
   		 emit resultReady(parameter);           //emit啥事也不干,是給程序員看的,表示發(fā)出信號
    }
 
signals:
    void resultReady(const int result);               //線程完成工作時發(fā)送的信號
};
 
#endif // WORKER_H

//用于托管我的子線程文章來源地址http://www.zghlxwxcb.cn/news/detail-860121.html

#ifndef CONTROLLER_H
#define CONTROLLER_H
#include <QObject>
#include<QThread>
#include<QDebug>
class Controller : public QObject            //controller用于啟動線程和處理線程執(zhí)行結果
{
    Q_OBJECT
    public:
    QThread workerThread;
public:
    Controller(QObject *parent= nullptr);
    ~Controller();
    
public slots:
    void handleResults(const int rslt)        //處理線程執(zhí)行的結果
    {
        qDebug()<<"     current thread ID:"<<QThread::currentThreadId()<<'\n';
    }
};
 
#endif // CONTROLLER_H
#include "controller.h"
#include <worker.h>
Controller::Controller(QObject *parent) : QObject(parent)
{
    Worker *worker = new Worker;
    worker->moveToThread(&workerThread);            //調(diào)用moveToThread將該任務交給workThread
 
    connect(this, SIGNAL(startThread(const int)), worker, SLOT(doWork(int)));     //startThread信號發(fā)射后啟動線程工作
   
    workerThread.start();                //啟動線程
    qDebug()<<"     current thread ID:"<<QThread::currentThreadId()<<'\n';
    emit startThread(0);
}
 
Controller::~Controller()        //析構函數(shù)中調(diào)用quit()函數(shù)結束線程
{
    workerThread.quit();
    workerThread.wait();
}
}

moveToThread方法
,是把我們需要的工作全部封裝在一個類中,將每個任務定義為一個的槽函數(shù),再建立觸發(fā)這些槽的信號,然后把信號和槽連接起來,
最后將這個類調(diào)用moveToThread方法交給一個QThread對象,
調(diào)用QThread的start()函數(shù)使其全權處理事件循環(huán)。于是,任何時候我們需要讓線程執(zhí)行某個任務,只需要發(fā)出對應的信號就可以。
其優(yōu)點是我們可以在一個worker類中定義很多個需要做的工作,然后發(fā)出觸發(fā)的信號線程就可以執(zhí)行。
相比于子類化的QThread只能執(zhí)行run()函數(shù)中的任務,
moveToThread的方法中一個線程可以做很多不同的工作(只要發(fā)出任務的對應的信號即可)

到了這里,關于qt創(chuàng)建線程的兩種方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Qt多線程使用的兩種方式

    方式1 :繼承自QThread類,重載run函數(shù)。此實現(xiàn)方法只有run()函數(shù)內(nèi)的代碼是運行在子線程內(nèi)。 (不使用事件循環(huán)) 使用方法 : (1)run函數(shù)內(nèi)有一個while或for的死循環(huán)(模擬耗時操作); (2)通過一個 標記位 來控制死循環(huán)的退出; (3)run()函數(shù)中無限循環(huán)記得 強制休息

    2023年04月10日
    瀏覽(28)
  • 線程方法接收參數(shù)示例,Java的兩種線程實現(xiàn)方式區(qū)別

    總所周知,Java實現(xiàn)多線程有兩種方式,分別是繼承Thread類和實現(xiàn)Runable接口,那么它們的區(qū)別是什么? 繼承 Thread 類: 通過繼承 Thread 類,你可以創(chuàng)建一個直接表示線程的類。你可以覆蓋 Thread 類中的 run 方法來定義線程的邏輯。當調(diào)用 start 方法啟動線程時,會執(zhí)行該類中的

    2024年02月11日
    瀏覽(54)
  • 線程方法接收參數(shù)和返回參數(shù),Java的兩種線程實現(xiàn)方式對比

    總所周知,Java實現(xiàn)多線程有兩種方式,分別是繼承Thread類和實現(xiàn)Runable接口,那么它們的區(qū)別是什么? 繼承 Thread 類: 通過繼承 Thread 類,你可以創(chuàng)建一個直接表示線程的類。你可以覆蓋 Thread 類中的 run 方法來定義線程的邏輯。當調(diào)用 start 方法啟動線程時,會執(zhí)行該類中的

    2024年02月11日
    瀏覽(29)
  • 【Java|多線程與高并發(fā)】線程的中斷的兩種方法

    【Java|多線程與高并發(fā)】線程的中斷的兩種方法

    線程中斷是指在一個線程執(zhí)行的過程中,強制終止該線程的執(zhí)行。雖說是中斷,但本質上是讓run方法快點執(zhí)行完,而不是run方法執(zhí)行到一半,強制結束. 本文主要介紹線程中斷的兩種方法 看下面這段代碼: 運行結果: 看下面這張圖: 在這段代碼中,定義了一個 flag 的標志位,在 線程

    2024年02月08日
    瀏覽(29)
  • 二叉樹創(chuàng)建的兩種方法(圖解)

    二叉樹創(chuàng)建的兩種方法(圖解)

    ? ? ? ? 目錄 一、括號表示法 (1)括號表示法構建二叉樹的算法思路及算法實現(xiàn) (2)圖解括號表示法構建二叉樹 (3)測試程序 ?二、擴展二叉樹 (1)擴展二叉樹構建二叉樹的算法思路及算法實現(xiàn) (2)測試程序 ????????二叉樹的創(chuàng)建方法有很多種,在這里我介紹兩種

    2024年02月06日
    瀏覽(35)
  • Qt+OpenCV顯示圖片的兩種方法(代碼演示)

    Qt+OpenCV顯示圖片的兩種方法(代碼演示)

    導? 讀 ????本文主要介紹Qt+OpenCV顯示圖像的兩種方法,并通過代碼演示效果。 背景介紹 ? ??OpenCV本身提供了一些GUI方法,但使用起來仍有局限性。以C++為例,實際應用中我們大多會使用Qt或MFC來編寫GUI程序。相較之下,Qt比MFC更易上手且界面樣式更豐富,所以越來越多的

    2024年02月07日
    瀏覽(22)
  • C++ 實現(xiàn)定時器的兩種方法(線程定時和時間輪算法修改版)

    定時器要求在固定的時間異步執(zhí)行一個操作,比如boost庫中的boost::asio::deadline_timer,以及MFC中的定時器。也可以利用c++11的thread, mutex, condition_variable 來實現(xiàn)一個定時器。 1、使用C++11中的thread, mutex, condition_variable來實現(xiàn)一個定時器。 注:此算法會每一個任務創(chuàng)建一個線程,不推

    2024年02月05日
    瀏覽(28)
  • QT創(chuàng)建線程的方法:一步步教你創(chuàng)建和啟動線程

    QT創(chuàng)建線程的方法:一步步教你創(chuàng)建和啟動線程

    目錄 線程概念及官方文檔 ?一、線程的創(chuàng)建:繼承方式 二、線程的創(chuàng)建:QObject 對象(moveToThread) 2.1 創(chuàng)建任務類 2.2 添加線程啟動(定時器啟動) 2.3?添加線程啟動(start信號啟動) 三、線程類的基本接口和使用 3.1啟動 和終止線程 3.2 線程延遲 3.3 線程同步及通信方式 3.4

    2024年02月13日
    瀏覽(21)
  • QT打包的兩種方式

    QT打包的兩種方式

    QT打包的兩種方式: 一個是QT5自帶的windeployqt(不需要下載安裝),它可以找到程序(exe)用到的所有庫文件,并且都拷貝到exe程序的當前文件。此時打包的exe較小,需要和拷貝進來的文件放一起運行,也可以將這些文件再次打包成一個大的exe文件,此時用的第二種打包方式

    2024年02月16日
    瀏覽(26)
  • 【linux 多線程并發(fā)】線程本地數(shù)據(jù)存儲的兩種方式,每個線程可以有同名全局私有數(shù)據(jù),以及兩種方式的性能分析

    ? 專欄內(nèi)容 : 參天引擎內(nèi)核架構 本專欄一起來聊聊參天引擎內(nèi)核架構,以及如何實現(xiàn)多機的數(shù)據(jù)庫節(jié)點的多讀多寫,與傳統(tǒng)主備,MPP的區(qū)別,技術難點的分析,數(shù)據(jù)元數(shù)據(jù)同步,多主節(jié)點的情況下對故障容災的支持。 手寫數(shù)據(jù)庫toadb 本專欄主要介紹如何從零開發(fā),開發(fā)的

    2024年02月03日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包