Qt實現多執行緒的簡單例子(VS2015Professional+Qt5.7.1)
阿新 • • 發佈:2019-02-03
這個例子是在參考教材略微改了一下。
主要實現的是單擊開始按鈕啟動數個工作執行緒,工作執行緒數目由一個巨集定義的常數決定,各個執行緒迴圈列印數字0~9,直到按下停止按鈕,終止所有執行緒。
新建QtGUi專案我的專案叫threaddlg,在ui Designer裡設定按鈕以及名稱。
新增類命名為workthread,專案檔案如下:
在threaddlg.h中程式碼如下:
#pragma once #include <QtWidgets/QDialog> #include "ui_threaddlg.h" #include "workthread.h" #include <QMessageBox> #define MAXSIZE 5 class threaddlg : public QDialog { Q_OBJECT public: threaddlg(QWidget *parent = Q_NULLPTR); public slots: void BtnStartClicked(); void BtnStopClicked(); private: Ui::threaddlgClass ui; workthread *workThread[MAXSIZE]; };
threaddlg.cpp中的程式碼如下:
#include "threaddlg.h" threaddlg::threaddlg(QWidget *parent) : QDialog(parent) { ui.setupUi(this); connect(ui.BtnStart, SIGNAL(clicked()), this, SLOT(BtnStartClicked())); connect(ui.Btnstop, SIGNAL(clicked()), this, SLOT(BtnStopClicked())); connect(ui.BtnQuit, SIGNAL(clicked()), this, SLOT(close())); } void threaddlg::BtnStartClicked() { QMessageBox::information(this, "OK", "Connect Successful"); for (int i = 0; i < MAXSIZE; i++) { workThread[i] = new workthread(); } for (int i = 0; i < MAXSIZE; i++) { workThread[i]->start(); } ui.BtnStart->setEnabled(false); ui.Btnstop->setEnabled(true); } void threaddlg::BtnStopClicked() { QMessageBox::information(this, "OK", "Connect Successful"); for (int i = 0; i < MAXSIZE; i++) { workThread[i]->terminate(); workThread[i]->wait(); } ui.BtnStart->setEnabled(true); ui.Btnstop->setEnabled(false); }
workthread.h程式碼如下:
#pragma once
#include <QThread>
#include <QDebug>
class workthread:public QThread
{
public:
workthread();
~workthread();
protected:
void run();
};
workthread.cpp程式碼為
#include "workthread.h" workthread::workthread() { } workthread::~workthread() { } void workthread::run() { while (true) { for (int n = 0; n < 10; n++) qDebug() << n << n << n << n << n << n << n << n; } }
main.cpp程式碼為
#include "threaddlg.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
threaddlg w;
w.show();
return a.exec();
}
輸出視窗放大: