日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt 多线程的简单演示

發布時間:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt 多线程的简单演示 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Qt 多線程的簡單演示

任務:單擊“”開始“”按鈕將啟動數個工作線程,線程由checkBox 來決定線程的啟用或者關閉,各個線程循環打印數字,數字每秒累加1;單擊“停止”按鈕將終止所有線程。


關于Qt中線程的理解:

Qt中的QThread類提供了平臺無關的線程。一個QThread代表了一個在應用程序中可以獨立控制的線程,它與進程中的其他線程分享數據,而且是獨立執行的。

多線程編程可以有效解決在不凍結一個應用程序的用戶界面情況下執行一個耗時的操作問題。

相對于一般的程序都是從main()函數開始執行,QThread從run()函數開始執行。

QThread也提供了一個預平臺五關的睡眠函數。

實現過程:

單獨構造一個WorkThread 類

#ifndef WORKTHREAD_H #define WORKTHREAD_H #include<QString> #include<QThread> #include<QObject>class Workthread:public QThread {Q_OBJECT public:Workthread();QString str;protected:void run(); signals:void mysignal(int);};#endif // WORKTHREAD_H #include "workthread.h" #include<QDebug>Workthread::Workthread() {}void Workthread::run() {while(true){for(int n = 0;n<1000;n++){str = QString::number(n);sleep(1);emit(mysignal(n));qDebug()<<str;}} }

在workThread類中,定義了run() 來實現定時器累加。

接著在mianwindow.cpp 的構造函數中添加如下代碼,這里將創建多個線程的對象。關聯按鈕來控制線程的開啟和終止。

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);setWindowTitle("線程");for(int i = 0;i<MAXSIZE;i++){workThread[i] = new Workthread();connect(workThread[i],SIGNAL(mysignal(int)),this,SLOT(ShowMsg(int)));}for(int i = 0;i<5;i++){flag_thread[i] = false;}connect(ui->pushButton_start,SIGNAL(clicked()),this, SLOT(slotStart()));connect(ui->pushButton_stop,SIGNAL(clicked()),this, SLOT(slotStop()));connect(ui->pushButton_exit,SIGNAL(clicked()),this, SLOT(close())); }

接著:在信號槽函數中實現 線程的開啟和終止

void MainWindow::slotStart() {for(int i = 0;i<5;i++){if(flag_thread[i]){workThread[i]->start();}}ui->pushButton_start->setEnabled(false);ui->pushButton_stop->setEnabled(true); }void MainWindow::slotStop() {for(int i = 0;i<5;i++){if(flag_thread[i]){workThread[i]->terminate();workThread[i]->wait();}}ui->pushButton_start->setEnabled(true);ui->pushButton_stop->setEnabled(false); }

我們用一個editText 部件來顯示線程處理中的數值,ShowMsg()函數來接收線程傳遞過來的信號mysignal(int)

這里,我們關聯

connect(workThread[i],SIGNAL(mysignal(int)),this,SLOT(ShowMsg(int))); void MainWindow::ShowMsg(int i ) {QString str = QString::number(i);ui->textEdit->append(str); }

這樣就可以實現文本框的顯示了。

最后,checkBox 部件的實現,我們讓該部件來響應線程的開啟和關閉、

void MainWindow::on_checkBox_1_clicked(bool checked) {if(checked){flag_thread[0] = true;workThread[0]->start();}else{flag_thread[0] = false;workThread[0]->terminate();workThread[0]->wait();} }

這樣,關于Qt多線程的并發處理的簡單例子就實現了,這里并沒有涉及線程間控制的相關內容。

資源鏈接:
https://download.csdn.net/download/qq_21291397/12354483

總結

以上是生活随笔為你收集整理的Qt 多线程的简单演示的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。