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

詳解Qt中線程的使用方法

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

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

要使用線程要經過一下四個步驟:

(1)先創(chuàng)建一個c++ class文件,記得繼承Thread,創(chuàng)建步驟如下:

a、第一步

b、第二步

(2)自定義一個run函數,以后啟動線程的時候,程序就會跳轉到run函數中

void run();

(3)初始化線程

HDThread mythread = new HDThread();

(4)啟動線程

mythread->start();

下面來看看線程使用的具體列子:

線程頭文件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函數
    void setLabel(QLabel *lb);
private:
    QLabel *label;
    QMutex *mutex; //互斥鎖
};

#endif // HDTHREAD_H

主函數的頭文件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)的信號類
    static QSemaphore *sp_A;
    static QSemaphore *sp_B;
private slots:
    void on_pushButton_clicked();

private:
    Ui::ThreadQt *ui;

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

};

#endif // THREADQT_H

源文件hdthread.cpp:

#include "hdthread.h"
#include <QDebug>
#include <threadqt.h>
HDTHread::HDTHread(QMutex *mtex, QObject *parent):QThread(parent)//構造函數,用來初始化
{
    this->mutex = mtex;
}
void HDTHread::setLabel(QLabel *lb)
{
    this->label = lb;
}
 
void HDTHread::run() //啟動線程時執(zhí)行的函數
{
    while(true)
    {
 
        qint64 data = qrand()%1000; //取隨機數
        //this->mutex->lock();//上鎖
        ThreadQt::sp_A->acquire();//請求信號
        this->label->setText(QString::number(data));
         sleep(1);
        ThreadQt::sp_B->release();//釋放信號
        //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)建信號對象
    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();//開啟線程
 
    writethread = new WriteFile(&mutex);
    writethread->setLabel(ui->label);
    writethread->start();
}

大家也看到了,此處的線程也用到了互斥鎖(信號量)保證線程讀寫數據時不出現(xiàn)錯誤,這里大家可以看一下具體實現(xiàn)的代碼

this->mutex->lock();//上鎖
ThreadQt::sp_A->acquire();//請求信號
this->label->setText(QString::number(data));
sleep(1);
ThreadQt::sp_B->release();//釋放信號
this->mutex->unlock();//解鎖

到此這篇關于詳解Qt中線程的使用方法的文章就介紹到這了,更多相關Qt線程內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++11中列表初始化機制的概念與實例詳解

    C++11中列表初始化機制的概念與實例詳解

    在我們實際編程中,我們經常會碰到變量初始化的問題,對于不同的變量初始化的手段多種多樣,下面這篇文章主要給大家介紹了關于C++11中列表初始化機制的相關資料,需要的朋友可以參考下
    2021-11-11
  • C++編程中new運算符的使用學習教程

    C++編程中new運算符的使用學習教程

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

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

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

    C++常見錯誤中英文對照表

    對于剛學編程,剛接觸C++的新手來說,編譯運行報錯是最頭疼的一件事,爆出一堆英文,英語差一點的又不知道什么意思,所以也不知道如何去改,在此,我給大家傳一份常見錯誤中英文對照表及簡單解釋,希望可以幫到大家
    2016-05-05
  • C++常量詳解一(常量指針與常量引用的初始化)

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

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

    Qt調用MATLAB引擎混合編程的過程詳解

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

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

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

    c++ 基于opencv 識別、定位二維碼

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

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

    簡單來說,左值就是可以使用&符號取地址的值,而右值一般不可以使用&符號取地址,這篇文章主要來和大家講講面試中左值與右值??嫉闹R點,需要的可以參考一下
    2023-06-06
  • C++抽象數據類型介紹

    C++抽象數據類型介紹

    這篇文章主要介紹了C++抽象數據類型,我們在學數據結構的時候,經常遇到的一個概念就是抽象數據類型(Abstract Data Type),簡稱ADT。下面我們就對ADT作更多介紹,需要的朋友可以參考一下
    2022-01-01

最新評論

盐亭县| 虎林市| 木里| 富川| 义马市| 四会市| 班玛县| 固始县| 长宁县| 全南县| 苍溪县| 黎平县| 琼结县| 潢川县| 建宁县| 保定市| 瑞金市| 贵港市| 邵阳市| 澄迈县| 汕尾市| 仙游县| 综艺| 卓尼县| 沙坪坝区| 昌乐县| 都兰县| 长兴县| 崇明县| 锡林浩特市| 桦甸市| 沅江市| 天等县| 江口县| 北安市| 长沙县| 宜宾市| 旌德县| 宁海县| 施甸县| 伊宁县|