QT 多线程使用简单实例

21 篇文章 0 订阅

操作:创建多个线程对数据进行排序处理,重写Run方法

界面:(h/cpp )

#ifndef THREADDLG_H
#define THREADDLG_H

#include <QDialog>
#include <QPushButton>
#include "workthread.h"
#define MAXSIZE 5							//MAXSIZE宏定义了线程的数目
class ThreadDlg : public QDialog
{
    Q_OBJECT

public:
    ThreadDlg(QWidget *parent = 0);
    ~ThreadDlg();
private:
    QPushButton *startBtn;
    QPushButton *stopBtn;
    QPushButton *quitBtn;
    workThread *myThread[MAXSIZE];		//创建线程指针数组
public slots:
    void slotStart();						//槽函数用于启动线程
    void slotStop();						//槽函数用于终止线程
};

#endif // THREADDLG_H
#include "threaddlg.h"
#include <QHBoxLayout>
ThreadDlg::ThreadDlg(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle(tr("线程"));
    startBtn = new QPushButton(tr("开始"));
    stopBtn = new QPushButton(tr("停止"));
    quitBtn = new QPushButton(tr("退出"));

    QHBoxLayout *mainLayout = new QHBoxLayout(this);
    mainLayout->addWidget(startBtn);
    mainLayout->addWidget(stopBtn);
    mainLayout->addWidget(quitBtn);

    connect(startBtn,SIGNAL(clicked()),this,SLOT(slotStart()));
    connect(stopBtn,SIGNAL(clicked()),this,SLOT(slotStop()));
    connect(quitBtn,SIGNAL(clicked()),this,SLOT(close()));
}

void ThreadDlg::slotStart()
{
    for(int i=0;i<MAXSIZE;i++)
    {
        myThread[i]=new workThread();	//创建五个线程
    }
    for(int i=0;i<MAXSIZE;i++)
    {
        myThread[i]->start();			//启动这五个线程
    }
    startBtn->setEnabled(false);
    stopBtn->setEnabled(true);
}

void ThreadDlg::slotStop()
{
    for(int i=0;i<MAXSIZE;i++)
    {
        myThread[i]->terminate();//结束这五个线程
        myThread[i]->wait();//阻塞等待处理结束
    }
    startBtn->setEnabled(true);
    stopBtn->setEnabled(false);
}

ThreadDlg::~ThreadDlg()
{

}

线程类:(h/cpp)

#ifndef WORKTHREAD_H
#define WORKTHREAD_H

#include <QThread>

class workThread:public QThread
{
public:
    workThread();

protected:
    void run();
};

#endif // WORKTHREAD_H
#include "workthread.h"
#include <QDebug>
#include <QVector>

workThread::workThread()
{

}

void workThread::run()
{
    QVector<int> nums{1,2,4,3,6,4,2,2,23434,554,232,323,54,66};
    int n = nums.size();
    bool isChange = false;
    while (true) {
        for(int i = 1;i<n;i++){
            for(int j = 0;j<n-i-1;j++){
                if(nums[j]>nums[j+1])
                {
                    int t = nums[j];
                    nums[j] = nums[j+1];
                    nums[j+1] = t;
                    isChange = true;
                }
            }
            if(!isChange){
                break;
            }
        }

        for(int &n:nums){
            qDebug()<<n<<" ";
        }
    }
}

执行:

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值