Qt:多线程学习(一)

12 篇文章 1 订阅

多线程多线程,让人头大也头疼。之前代码一把撸,最近打算好好理一下。

一、多线程的优势

(1)提高应用程序的响应速度,UI防卡死。

(2)系统调度不同的线程,使其运行在不同的CPU上。

(3)改善程序结构。拆分代码,利于理解与维护代码。

二、多线程程序的特点

(1)无序。

(2)随时随地切换线程。

(3)代码敏感度高。

(4)运行结果不完全相同。

三、继承QThread,重写run()函数

分享给有需要的人,代码质量勿喷。

3.1 主线程MultiThreadTest

MultiThreadTest.h

#ifndef MULTI_THREAD_TEST_H
#define MULTI_THREAD_THET_H
#pragma execution_character_set("utf-8")

#include <QtWidgets/QMainWindow>
#include "ui_MultiThreadTest.h"

//local
#include "WorkThread.h"

class MultiThreadTest : public QMainWindow
{
	Q_OBJECT

public:
	MultiThreadTest(QWidget *parent = Q_NULLPTR);

public slots:
	void on_pushButtonStart_clicked();
	void on_pushButtonStop_clicked();

private:
	Ui::MultiThreadTestClass ui;
	WorkThread *workThread[10];
};
#endif // !MULTI_THREAD_THET_H

MultiThreadTest.cpp

#include "MultiThreadTest.h"

MultiThreadTest::MultiThreadTest(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);

	connect(ui.pushButtonQuit, SIGNAL(clicked()), this, SLOT(close()));
}

void MultiThreadTest::on_pushButtonStart_clicked()
{
	for (int i = 0; i < ui.spinBoxThread->value(); i++)
	{
		workThread[i] = new WorkThread();
	}
	for (int i = 0; i < ui.spinBoxThread->value(); i++)
	{
		workThread[i]->start();
	}

	ui.pushButtonStart->setEnabled(false);
	ui.pushButtonStop->setEnabled(true);
}

void MultiThreadTest::on_pushButtonStop_clicked()
{
	for (int i = 0; i < ui.spinBoxThread->value(); i++)
	{
		workThread[i]->terminate();
		workThread[i]->wait();
	}

	ui.pushButtonStart->setEnabled(true);
	ui.pushButtonStop->setEnabled(false);
}

3.2 线程类WorkThread

MultiThreadTest.h

#ifndef MOEK_THREAD_H
#define MOEK_THREAD_H

#include <QThread>
#include <QtDebug>
#include <QFile>

class WorkThread :	public QThread
{
	Q_OBJECT

public:
	WorkThread();

protected:
	void run();
};
#endif // !MOEK_THREAD_H

MultiThreadTest.cpp

#include "WorkThread.h"

WorkThread::WorkThread() {}

void WorkThread::run()
{
	while (true)
	{
		for (int i = 0; i < 10; i++)
		{
			QFile xjFile("F:/test.las");
			if (myFile.open(QIODevice::ReadOnly))
			{
				int size = xjFile.size();
				xjFile.close();

				qDebug() << size << i << i << i << i << i << i;
			}
		}
	}
}

四、试验结果

单线程是有序的,多线程是无序的。

     

五、参考文献

[1]陆文周. Qt 5 开发及实例[M].北京:电子工业出版社, 2015: 326-330.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

累了就要打游戏

把我养胖,搞代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值