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

Qt進(jìn)程和線程QProcess和QThread的使用

 更新時(shí)間:2023年06月05日 10:40:42   作者:Yengi  
本文主要介紹了Qt進(jìn)程和線程QProcess和QThread的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1、進(jìn)程

QProcess相當(dāng)于管理進(jìn)程的一個(gè)類。

.start()相當(dāng)于fork + exec函數(shù)族

(1)頭文件

#include <QProcess>

(2)聲明和創(chuàng)建

QProcess *np = new QProcess;

(3)啟動(dòng)進(jìn)程

//直接啟動(dòng):
np->start("notepad");
//帶命令行參數(shù)啟動(dòng):
QString program = "cmd.exe";
QStringList arguments;
arguments << "/c dir&pause";
myProcess.start(program, arguments);

(4)如何獲取進(jìn)程運(yùn)行時(shí)候的一些數(shù)據(jù)

①信號(hào):readyRead()

②讀取數(shù)據(jù):readAll();

(5)判斷進(jìn)程的運(yùn)行狀態(tài)

//進(jìn)程狀態(tài)
enum ProcessState { NotRunning, Starting, Running }
//獲取進(jìn)程狀態(tài)
state()

(6)關(guān)閉進(jìn)程

//直接關(guān)閉
np->close();
//發(fā)送殺死信號(hào):
np->kill();

注意:

發(fā)送信號(hào)的同時(shí),進(jìn)程不一定結(jié)束,一般要用到進(jìn)程的一些同步函數(shù):

np->waitForFinished();//阻塞到進(jìn)程結(jié)束
np->waitForStarted();//阻塞到進(jìn)程開(kāi)始
np->waitForReadyRead();//阻塞到可以從當(dāng)前進(jìn)程讀取數(shù)據(jù)
np->waitForBytesWritten();//阻塞到數(shù)據(jù)寫(xiě)入進(jìn)程

(7)如果要給一個(gè)正在運(yùn)行的進(jìn)程發(fā)送數(shù)據(jù)

write()

2、線程

源代碼——可執(zhí)行程序文件——進(jìn)程(資源分配的基本單位 PCB)——線程(任務(wù)調(diào)度的基本單位)

pthread_create(pid, attr, func, arg);

QT線程有三種方式:

1.繼承QThread,重寫(xiě)run函數(shù)

//自定義線程類的頭文件
//添加線程類頭文件
#include <QThread>
//在類聲明里面添加
Q_OBJECT
//重寫(xiě)run函數(shù):線程任務(wù)函數(shù)
void run();
void MyThread::run()
{
? ? while(1)
? ? {
? ? ? ? QThread::sleep(1);
? ? ? ? qDebug()<<"son run";
? ? }
}
/*----------------------------------------------------------------------------------------*/
//在使用的地方
//添加自定義線程類的頭文件
#include "mythread.h"
//創(chuàng)建線程對(duì)象
MyThread *mth;
mth = new MyThread;
//開(kāi)啟線程
mth->start();
//關(guān)閉線程
mth->terminate();
mth->wait();
//線程間的數(shù)據(jù)傳遞
//一般使用信號(hào)槽機(jī)制來(lái)實(shí)現(xiàn)

2.直接使用QThread + 自定義QObject派生類的方式

//一個(gè)繼承于QObject類的一個(gè)自定義類
class thread_object : public QObject
//自定義槽函數(shù)work()
public slots:
? ? void work();
void thread_object::work()
{
? ? while(1)
? ? {
? ? ? ? qDebug()<<"object thread run";
? ? ? ? QThread::sleep(1);
? ? }
}
//在主線程中創(chuàng)建一個(gè)普通QThread類的對(duì)象mth
QThread *mth;
mth = new QThread;
//在主線程中創(chuàng)建一個(gè)自定義類thread_object 的對(duì)象work
thread_object *work;
work = new thread_object;
//將w的實(shí)現(xiàn)移入線程mth的作用范圍
work->moveToThread(mth);
//用信號(hào)關(guān)聯(lián)w里面想要執(zhí)行的任務(wù)
//在主線程中聲明一個(gè)信號(hào)start_th();
signals:
? ? void start_th();
//關(guān)聯(lián)這個(gè)信號(hào)的槽函數(shù)為workwork();
connect(this, &MainWindow::start_th, work, &thread_object::work);
//開(kāi)啟線程
mth->start();
emit start_th();

3.用線程池 + 自定義QRunnable派生類的方式

每一個(gè)QT程序都存在一個(gè)默認(rèn)的線程池

default_pool = QThreadPool::globalInstance();

1.自定義一個(gè)繼承于抽象類QRunnable的類(不能添加Q_OBJECT)

class MyTask : public QRunnable
{
public:
    MyTask(QString name);
    void run();
    QString th_name;
};

2.實(shí)現(xiàn)run函數(shù)

void MyTask::run()
{
    while(1)
    {
        QThread::sleep(1);
        qDebug()<<"任務(wù):【"<<this->th_name<<"】 正在運(yùn)行...";
    }
}

3.創(chuàng)建一個(gè)線程池對(duì)象

QThreadPool *pool;
pool = new QThreadPool;

4.添加任務(wù)到線程池

//創(chuàng)建自定義的任務(wù)
MyTask *t = new MyTask(ui->lineEdit->text());
//將任務(wù)添加到線程池
pool->start(t);

5.線程池的相關(guān)函數(shù)

int activeThreadCount() const : 當(dāng)前活躍的線程數(shù)量
void cancel(QRunnable *runnable):移除掉沒(méi)有運(yùn)行的指定任務(wù)
void clear():移除掉所有沒(méi)有運(yùn)行的任務(wù)
int expiryTimeout() const:如果有任務(wù)超時(shí)未執(zhí)行,可以通過(guò)這個(gè)函數(shù)自動(dòng)讓其退出
int maxThreadCount() const:線程池可維護(hù)的最大的線程個(gè)數(shù)
void releaseThread():釋放保留線程
void reserveThread():保留線程
void setExpiryTimeout(int expiryTimeout):與expiryTimeout()函數(shù)一起用,設(shè)置超時(shí)時(shí)間
void setMaxThreadCount(int maxThreadCount):設(shè)置線程可管理的最大線程個(gè)數(shù)
void start(QRunnable *runnable, int priority = 0):添加線程到線程池
bool tryStart(QRunnable *runnable):嘗試啟動(dòng)一個(gè)指定的線程
bool waitForDone(int msecs = -1):等待退出

到此這篇關(guān)于Qt進(jìn)程和線程QProcess和QThread的使用的文章就介紹到這了,更多相關(guān)Qt QProcess QThread內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實(shí)現(xiàn)LeetCode(48.旋轉(zhuǎn)圖像)

    C++實(shí)現(xiàn)LeetCode(48.旋轉(zhuǎn)圖像)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(48.旋轉(zhuǎn)圖像),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 堆基本操作實(shí)現(xiàn)最大堆

    堆基本操作實(shí)現(xiàn)最大堆

    這篇文章主要介紹了堆基本操作實(shí)現(xiàn)最大堆,需要的朋友可以參考下
    2014-02-02
  • 使用VS2022開(kāi)發(fā)并部署QT應(yīng)用實(shí)現(xiàn)

    使用VS2022開(kāi)發(fā)并部署QT應(yīng)用實(shí)現(xiàn)

    本文介紹了使用MSVC工具鏈編譯和部署QT框架應(yīng)用程序的環(huán)境配置與編譯部署過(guò)程,
    2025-09-09
  • C語(yǔ)言編程銀行ATM存取款系統(tǒng)實(shí)現(xiàn)源碼

    C語(yǔ)言編程銀行ATM存取款系統(tǒng)實(shí)現(xiàn)源碼

    這篇文章主要為大家介紹了C語(yǔ)言編程銀行ATM存取款系統(tǒng)實(shí)現(xiàn)的源碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • C語(yǔ)言基礎(chǔ)解析之分支與循環(huán)語(yǔ)句

    C語(yǔ)言基礎(chǔ)解析之分支與循環(huán)語(yǔ)句

    C語(yǔ)言是一門(mén)結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言,當(dāng)C語(yǔ)言用來(lái)描述生活中的事物時(shí),會(huì)用到三種結(jié)構(gòu):順序結(jié)構(gòu)(不去贅述),選擇結(jié)構(gòu)(對(duì)應(yīng)分支語(yǔ)句),循環(huán)結(jié)構(gòu)(對(duì)應(yīng)循環(huán)語(yǔ)句),分支語(yǔ)句:分支語(yǔ)句分為兩種,一種是if語(yǔ)句,一種是switch語(yǔ)句
    2021-09-09
  • C語(yǔ)言實(shí)現(xiàn)數(shù)組元素排序方法詳解

    C語(yǔ)言實(shí)現(xiàn)數(shù)組元素排序方法詳解

    這篇文章主要為大家介紹了C語(yǔ)言算法練習(xí)中數(shù)組元素排序的實(shí)現(xiàn)方法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C語(yǔ)言有一定幫助,需要的可以參考一下
    2023-02-02
  • Qt實(shí)現(xiàn)可拖動(dòng)按鈕

    Qt實(shí)現(xiàn)可拖動(dòng)按鈕

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)可拖動(dòng)按鈕,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • C語(yǔ)言連續(xù)生成多個(gè)隨機(jī)數(shù)實(shí)現(xiàn)可限制范圍

    C語(yǔ)言連續(xù)生成多個(gè)隨機(jī)數(shù)實(shí)現(xiàn)可限制范圍

    這篇文章主要介紹了C語(yǔ)言連續(xù)生成多個(gè)隨機(jī)數(shù)實(shí)現(xiàn)可限制范圍,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C++ 中的虛函數(shù)表及虛函數(shù)執(zhí)行原理詳解

    C++ 中的虛函數(shù)表及虛函數(shù)執(zhí)行原理詳解

    這篇文章主要介紹了C++ 中的虛函數(shù)表及虛函數(shù)執(zhí)行原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C++利用VLC庫(kù)制作音視頻的示例代碼

    C++利用VLC庫(kù)制作音視頻的示例代碼

    這篇文章主要為大家詳細(xì)介紹了C++如何利用VLC庫(kù)制作音視頻,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下
    2024-01-01

最新評(píng)論

光山县| 喀什市| 松原市| 宜兴市| 怀宁县| 霍林郭勒市| 长岭县| 厦门市| 临城县| 土默特右旗| 淮安市| 遵义县| 道孚县| 南城县| 社旗县| 阜平县| 永平县| 南丹县| 沙河市| 马山县| 新疆| 鸡西市| 从化市| 阿尔山市| 得荣县| 双流县| 清原| 阿拉善盟| 财经| 垫江县| 娄底市| 玉门市| 安徽省| 沧州市| 双牌县| 青田县| 石首市| 略阳县| 东阳市| 会东县| 微山县|