Qt多线程笔记 (2)

Qt网络通信,多线程实现UDP通信 Qt使用多线程进行UDP通信 UDP 由于要使用套接字,所以需要在服务器和客户端的工程文件中都添加QT += core gui network 使用writeDatagram方法传输数据,readDatagram方法接收数据。QT在调用writeDatagram方法时候会自动发出readyRead信号给接收方监听。 多线程 Qt有两种多线程的方法,其中一种是继承QThread的run函数,另外一种是把一个继承于QObject的类转移到一个Thread里,即使用MoveToThread。    阅读详情

需求:处理多个*.dat文件,为每一个*.dat开辟一个线程。
下面的代码是乞丐丁哥纯手工打造。再次强烈感谢天下热心人。

乞丐丁 的搞法是直接使用run()来运行work thread
还有个技巧就是通过构造函数来传递参数,这些参数在thread类里面是全局变量。


#ifndef TOOLREPLACE_H
#define TOOLREPLACE_H

#include <QtWidgets>

class CToolReplace : public QWidget
{
	Q_OBJECT

public:
	CToolReplace(QWidget *parent = 0);
	~CToolReplace();

	QStringList gasFileList;

signals:
	void SigSendFileName(qint32, QString);

private slots:
	void OpenFile();
	void SendFiles();
	void UpdateStatus(qint32 iRow, QString sStatus);

private:
	void InitUI();

private:
	QTableWidget *tbFile;

	QMenuBar *mbMain;

	QMenu *m_File;
	QAction *a_Open;
	QAction *a_Close;

	QMenu *m_Operate;
	QAction *a_Replace;

	QToolBar *tbMain;
};

#endif // TOOLREPLACE_H

#ifndef WORKTHREAD_H
#define WORKTHREAD_H

#include <QThread>

class CWorkThread : public QThread
{
	Q_OBJECT

public:
	CWorkThread(qint32 iRow, QString sFileName, QObject *parent = 0);	
	void run();
signals:
	void SigStatus(qint32, QString);
private:
	qint32 m_Row;
	QString m_FileName;
};

#endif // WORKTHREAD_H

#include "toolreplace.h"
#include "workthread.h"

CToolReplace::CToolReplace(QWidget *parent)
	: QWidget(parent)
{
	resize(710,500);
	InitUI();
	a_Replace->setEnabled(false);
}

CToolReplace::~CToolReplace()
{

}

void CToolReplace::InitUI()
{
	mbMain = new QMenuBar(this);

	m_File = mbMain->addMenu(tr("File"));

	a_Open = m_File->addAction(tr("Open File"));
	a_Open->setIcon(QIcon(":/CToolReplace/Open"));

	m_File->addSeparator();

	a_Close = m_File->addAction(tr("Close File"));
	a_Close->setIcon(QIcon(":/CToolReplace/Close"));

	m_Operate = mbMain->addMenu(tr("Operate"));

	a_Replace = m_Operate->addAction(tr("Replace"));
	a_Replace->setIcon(QIcon(":/CToolReplace/Replace"));

	tbMain = new QToolBar(this);

	tbMain->addAction(a_Open);

	tbMain->addSeparator();

    tbMain->addAction(a_Replace);

	tbMain->addSeparator();

    tbMain->addAction(a_Close);

	tbFile = new QTableWidget;
	tbFile->setColumnCount(2);
	tbFile->setHorizontalHeaderLabels(QStringList()<<tr("File Name")<<tr("Status"));
	tbFile->setColumnWidth(0,500);
	tbFile->setColumnWidth(1,200);

	QVBoxLayout *vl = new QVBoxLayout;
	vl->setContentsMargins(0,0,0,0);
	vl->setSpacing(0);
	vl->addWidget(mbMain);
	vl->addWidget(tbMain);
	vl->addWidget(tbFile);
	setLayout(vl);

	connect(a_Open, SIGNAL(triggered()), this, SLOT(OpenFile()));
	connect(a_Replace, SIGNAL(triggered()), this, SLOT(SendFiles()));
	connect(a_Close, SIGNAL(triggered()), this, SLOT(close()));
}

void CToolReplace::OpenFile()
{
	a_Replace->setEnabled(false);

	while(tbFile->rowCount() != 0)
	{
		tbFile->removeRow(tbFile->rowCount());
	}

    gasFileList = QFileDialog::getOpenFileNames(this,tr("Select Files"),"D:/","Dat(*.dat)");

	if(!gasFileList.isEmpty())
	{
		a_Replace->setEnabled(true);
	}

	for(qint32 i = 0; i < gasFileList.count(); i++)
	{
		tbFile->insertRow(i);
		tbFile->setItem(i,0,new QTableWidgetItem(gasFileList.at(i)));
		tbFile->setItem(i,1,new QTableWidgetItem(tr("Wait")));
	}
}

void CToolReplace::SendFiles()
{
	for(qint32 i = 0; i < gasFileList.count(); i++)
	{
		CWorkThread *myThread = new CWorkThread(i, gasFileList.at(i));		
		connect(myThread, SIGNAL(SigStatus(qint32, QString)), this, SLOT(UpdateStatus(qint32, QString)));
		connect(myThread, SIGNAL(finished()), myThread, SLOT(deleteLater()));
		myThread->start();
	}
}

void CToolReplace::UpdateStatus(qint32 iRow, QString sStatus)
{
	tbFile->setItem(iRow, 1, new QTableWidgetItem(sStatus));
}

#include "workthread.h"
#include <QStringList>
#include <QFile>
#include <QTextStream>
#include <QDebug>

CWorkThread::CWorkThread(qint32 iRow, QString sFileName, QObject *parent)
	: QThread(parent)
{
	m_Row = iRow;
	m_FileName = sFileName;
}

void CWorkThread::run()
{
	QStringList asAllRow;
    asAllRow.clear();

	QFile m_File(m_FileName);
    if(!m_File.open(QIODevice::ReadOnly | QIODevice::Text))
	{		
		emit SigStatus(m_Row, QString(tr("Cannot open file for read: %1").arg(m_File.errorString())));
		return;
	}
	emit SigStatus(m_Row, tr("1, Reading file~~~~~"));

	QTextStream m_TextStream(&m_File);
	m_TextStream.setCodec("UTF-8");

    while(!m_TextStream.atEnd())
	{
		asAllRow.append(m_TextStream.readLine());
	}
    m_File.close();

    qDebug()<<"str count:"<<asAllRow.count();	


    if (asAllRow.size() < 2)
    {
        qDebug()<<"Less than 2 row!";
        return;
    }

    emit SigStatus(m_Row, tr(("2, Replacing file~~~")));
    asAllRow.replace(1, asAllRow.at(2));


    QFile m_FileWrite(m_FileName);
    if(!m_FileWrite.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        emit SigStatus(m_Row, QString(tr("Cannot open file for read: %1").arg(m_FileWrite.errorString())));
        return;
    }


	emit SigStatus(m_Row, tr("3, Writing file~~~~~"));

    QTextStream m_TextStreamOut(&m_FileWrite);
    m_TextStreamOut.setCodec("UTF-8");

	for(qint32 iOut = 0; iOut < asAllRow.count(); iOut++)
	{
        m_TextStreamOut<<asAllRow.at(iOut)<<"\n";
	}

	m_TextStream.flush();

    m_FileWrite.close();

	emit SigStatus(m_Row, tr("4, Finished!~~~~~~~~"));
}


Qt 串口 QThread多线程 Qt串口多线实现 阅读详情

相关推荐

QT多线程接收串口数据

** QT多线程接收串口数据 ** 1.前言 QT多线程的使用,和绝大数人一样,犯了错误(请查阅Qt开发人员( Bradley T. Hughes)Blog中的文章 you are-doing-it-wrong介绍)。为了解决问题,网上查阅学习了几十篇文章,基本都是错误的使用方法,或者不完整,未能给予正确的引导。 为方便后来学习者,少走弯路,于是自己动手写了一下程序,过程不再赘述,只以完整的案例进行教学,内部注释较多,可供大家阅读、思考。 2.功能作用 使用多线程,避免上位机软件与单片机等硬件设备高速通讯时

aptblaze的博客 9806

Qt学习笔记1.2.1 Qt Core 线程与并发编程之多线程类与Qt中的多线程技术

但是,对QtConcurrent::run()的调用只使用一个线程,不能暂停/恢复/取消,也不能查询进度。要在QThreadPool的某个线程中运行代码,请重新实现QRunnable::run()并实例化子类QRunnable。当一个线程可用时,QRunnable::run()中的代码将在该线程中执行。Qt Concurrent的map、filter和reduce算法会自动将计算分布在所有可用的处理器内核上,因此现在编写的应用程序在以后部署到具有更多内核的系统上时将继续扩展。Qt5线程相关类,来源。

qq_18466391的博客 301

【Qt】Qt多线程开发—实现多线程设计的四种方法

Qt—使用Qt实现多线程设计的四种方法 一、写在前面 ​ 这篇文章内容是:关于Qt多线程应用设计,在Qt中提供了四种方法来进行多线程编程和设计。合理的选择对应的方法来解决实际开发中遇到的开发问题有助于对应用程序进行更合理设计。 文章目录Qt—使用Qt实现多线程设计的四种方法一、写在前面二、【方法一】 QThread:带有可选事件循环的底层API三、【方法二】 QThreadPool和QRunnable:重用线程四、【方法三 】Qt并发:使用高级API五、【方法四】 WorkerScript:QML中的线程化

iriczhao的博客 1万+

QT多线程编程详解

一、线程基础 1、GUI线程与工作线程 每个程序启动后拥有的第一个线程称为主线程,即GUI线程。QT中所有的组件类和几个相关的类只能工作在GUI线程,不能工作在次线程,次线程即工作线程,主要负责处理GUI线程卸下的工作。 2、数据的同步访问 每个线程都有自己的栈,因此每个线程都要自己的调用历史和本地变量。线程共享相同的地址空间。 二、QT多线程简介 QT通过三种形式提供了对线程...

coolboywjun的专栏 8万+

基于QT的上位机多线程设计模型

前言: 对于一般的上位机开发,无论是使用QT还是C#,主要功能包含:1.接收并解析下位机上传的数据、2.打包并发送数据到下位机、3.业务逻辑,对数据实时显示到界面或者存储到数据库。从软件分层的角度来看,底层是数据层、中间是业务逻辑处理、上层是UI。 为了不让界面假死或者卡顿,需要采用多线程的方式来实现。 1.抽象实现,建立模型 无论是QT/C#上位机,还是基于linux/nuttx…的APP,只要...

Boooooots的博客 3096

QT多线程的使用

QT中的线程用于实现多任务并发执行,提高程序的执行效率和响应速度。在QT中,线程是进行运算调度的最小单位,它们包含在进程之中并作为进程中的实际运作单位。使用线程的主要目的是让程序能够同时执行多个任务。提高性能和响应速度:通过将耗时的操作放在单独的线程中执行,可以避免UI冻结,提高应用程序的响应速度。实现多任务处理:一个进程中可以并发运行多个线程,每条线程并行执行不同的任务,有效地利用了计算机多核处理器的能力。简化复杂操作。

qq_48597462的博客 3350

【QT】Qt 多线程

在 Qt 中,多线程的处理⼀般是通过QThread类来实现。QThread代表⼀个在应用程序中可以独立控制的线程,也可以和进程中的其他线程共享数据。QThread对象管理程序中的⼀个控制线程。

YoungMLet的博客 4115

超详细!动态规划详解分析(典型例题分析和对比,附源码)

为啥要使用动态规划?什么时候使用动态规划?以下是我的一些理解和心得,如果你感兴趣,就接着往下看吧。 对您有帮助的话记得给我点个赞哟! 动态规划的基本思想 动态规划(Dynamic Programming,DP)算法通常用于求解某种具有最优性质的问题。在这类问题中,可能会有许多可行解,每一个解都对应一个值,我们希望找到具有最优值的解。 动态规划算法与分治法类似,其基本思想也是将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解中 得到原有问题的解。与分治法不同的是,动态规划经分解后得到的子问题

qq_44398094的博客 8万+

Qt学习笔记(四)多线程

在Qt中,多线程的处理一般是通过QThread类来实现。QThread代表一个在应用程序中可以独立控制的线程,也可以和进程中的其他线程共享数据。之前我们在Linux应用篇中提到过多线程的概念,使用它的好处是可以同时操作好几个目标,而不是因为上一个目标未结束使得需要的操作陷入阻塞状态。

sincerelover的博客 898

PyMuPDF`库实现PDF旋转功能

本文介绍了一个简单的Python应用程序,用于将PDF文件转换为旋转90度的PDF文件。通过使用`wx很抱歉,Markdown格式在当前聊天界面无法显示。我将为您提供纯文本格式的博客内容,您可以将其复制到Markdown编辑器中进行格式化。PDF转换工具本文介绍了一个简单的Python应用程序,用于将PDF文件转换为旋转90度的PDF文件。该工具使用了wxPython和PyMuPDF库。功能该PDF转换工具具有以下功能:1. 选择PDF文件:通过点击“选择文件”按钮,用户可以选择要转换的PDF文件。

Winfredzhang的博客 2733

小土堆学习笔记1:Dataset类代码实践

上一页中反复提到“类”,这究竟是什么东西?按我的理解(肯定不准确也不正式),class类就是某一个东西的共性,而且是等待被确认的共性。比如每台手机都有它自己的品牌、框架、价格等等属性,class类正是这些尚不确定的属性;而一旦确认了这些属性,就能够确认这到底是一台什么型号什么状态的手机,在确认了全部属性后就知道,这是一台Apple 16 Pro Max。抽象的不确定的共性就是类,具体的确定的个性就是示例。这个共性可以被用于多个编程目的,只不过某一个具体的编程行为还有它自己的独特性。

qq_40525602的博客 1625

【QT5】<重点> QT多线程

本篇记录学习QT多线程的知识,参考视频13.1QThread创建多线程程序_哔哩哔哩。若涉及版权问题,请联系作者删除!

致力于Linux的博客 2429

用PyTorch手把手搭建液态神经网络(LNN):从微分方程到无人机避障实战

本文详细介绍了如何使用PyTorch搭建液态神经网络(LNN),从微分方程基础到无人机避障实战应用。LNN通过动态时序建模和微分方程实现高效计算,特别适合多传感器数据融合场景。文章包含完整的代码实现、训练技巧及性能优化方案,帮助开发者快速掌握这一前沿技术。

uber9的博客 438

【QT开发日志】QT多线程编程:实现高效的多线程应用

在当今的软件开发领域,用户对应用程序的性能和响应速度要求越来越高。尤其是在处理复杂任务、大量数据或进行网络通信时,单线程往往难以满足需求,容易出现界面卡顿、操作无响应等问题,严重影响用户体验。

鸽芷咕的博客 9775

麒麟V10等保三级配置实战:从auditd规则到PAM锁定的可信基线构建

Linux安全基线是信息系统可信运行的基础能力,其核心在于身份鉴别、访问控制与安全审计三大机制的协同落地。在国产化信创环境中,麒麟V10作为深度适配飞腾/鲲鹏平台的操作系统,其等保三级合规并非简单套用CentOS加固脚本,而是需围绕内核审计(auditd)、可插拔认证模块(PAM)及国产安全增强机制(如kysec)进行精细化编排。技术价值体现在将抽象条款(如GB/T 22239-2019中6.1.2、6.3.3条)转化为可验证的命令行操作,确保登录失败可锁定、关键行为可追溯、时间偏差不致日志失效。典型应用场

weixin_29969209的博客 594

RH850系列芯片深度剖析 1.5-链接(ld)文件解析

基础编译过程分为四个阶段:预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)、链接(Linking)。执行这四个阶段的程序(预处理器、编译器、汇编器、和链接器)一起构成了编译系统。CONSTANTS接下来的内存空间定义部分会使用这些常量来定义内存空间的范围,理论上来说不定义常量也没有影响,直接用魔鬼数字代替,定义常量的主要目的就是方便理解以及方便修改;从示例中可以看出,常量的值可以为16进制或者10十进制,而且10进制支持数量级单位(k级,M级);

本博客专注于嵌入式软件领域技术分享。 1427

【QT教程】QT6多线程编程 QT多线程编程

QT6线程概述QT6线程概述在软件开发过程中,多线程编程是一项核心且至关重要的技能,尤其是在需要处理大量数据或进行复杂计算时。QT6作为一套成熟的跨平台C++应用程序框架,提供了强大的线程支持,使得多线程编程更加简洁易行。QT6中线程的基本概念在QT6中,线程主要是通过QThread类来实现的。QThread是一个能够运行和管理的线程类,它提供了低层次的线程控制,比如线程的启动、停止和线程间的通信等。为什么使用多线程多线程编程的主要优势在于它可以提高应用程序的响应性和性能。

QT性能优化QT原理源码QT界面美化 1478

DeepSeek揭秘:构建高效反洗钱智能监控系统的全流程与代码实例

在金融领域,反洗钱(AML)是一项至关重要的任务。随着金融交易的复杂性和规模不断增长,传统的手工监控方法已无法满足现代金融系统的需求。因此,开发一个智能监控系统来自动识别和报告可疑交易变得尤为重要。本文将详细介绍如何使用DeepSeek技术构建一个高效的反洗钱智能监控系统,并提供相关的代码实例。

理论都是虚的,代码才是王道。 883

QT 中多线程实现方法总结

c++

u011555996的博客 8341

【DaVinci Configurator专题】-6-将UDS&OBD诊断数据库文件CDD和PDX导入到CFG

CDD和ODX是两种诊断数据库文件。机器可读的诊断数据库其实就是将传统的Excel调查表等信息编辑成CDD或ODX文件。CDD是Vector私有的一种诊断数据库格式;ODX是国际标准的诊断数据交互格式。CANdelaStudio编辑CDD文件,以及也可以导出ODX文件;ODX Studio用于编辑ODX文件,诊断数据库的编辑其实就是诊断需求的定义。 下面以PDX为例,将其导入到DaVinci Configurator。 目录 1 打开DaVinci Configurator,导入PDX文件 2 解.

「汽车电子助手」的博客 6749

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Qt学习笔记:多线程的使用

程序中调用耗时的操作(如大批量I/O、实时通信、大计算量算法等)会造成用户界面的卡顿,通常将这一类操作放在子线程中来解决这一问题。

dingxiaoxv的博客 3099

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

QT多线程编程

一、线程基础 1、GUI线程与工作线程 每个程序启动后拥有的第一个线程称为主线程,即GUI线程。QT中所有的组件类和几个相关的类只能工作在GUI线程,不能工作在次线程,次线程即工作线程,主要负责处理GUI线程卸下的工作。 2、数据的同步访问 每个线程都有自己的栈,因此每个线程都要自己的调用历史和本地变量。线程共享相同的地址空间。 二、QT多线程简介 QT通过三种形式提供了对线程...

于大博 4410

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

QT多线程的四种实现

在QT环境下进行桌面应用程序开发的时候,应用程序在某些情况下需要处理比较复杂的逻辑, 如果只有一个线程去处理,易导致窗口卡顿。这种情况下就需要使用多线程,其中一个线程处理窗口事件,其他线程进行各自相关的逻辑操作,用户体验和程序的执行效率都显著提高。在qt中使用了多线程,有些事项是需要额外注意的:默认的线程在Qt中称之为窗口线程,也叫主线程,负责窗口事件处理或者窗口控件数据的更新;子线程负责后台的业务逻辑处理,子线程中不能对窗口对象做任何操作,, 如果操作了程序就会崩溃;

weixin_44555799的博客 4392

【QT八股文】系列之篇章3 | QT的多线程以及QThread与QObject

第一篇章主要是基础定义及QT中重要的事件机制【QT八股文】系列之篇章1 | QT的基础知识及事件/机制第二篇章主要是QT的信号与槽以及通讯流程【QT八股文】系列之篇章2 | QT的信号与槽及通讯流程这里我们主要件点更实际的,也就是多线程以及QThread与QObject因为介绍到信号与槽,所以笔者我会讲通讯流程提前在前面来介绍原创文章,未经同意请勿转载QThread 是 QT 中用于创建线程的类,它提供了一组方法用于启动、停止、监测线程的运行状态,以及获取线程的相关信息。

xiaobaizaza_Ry的博客 2575

Qt中的多线程

Qt中的多线程

龙木南的博客 6521

QT多线程

一、概念 Qt传统的用户界面应用程序都只有一个线程,一次执行一个操作,如果用户调用一个比较耗时的操作(大批量的I/O操作和高精深的算法等),甚至可能引发休眠的操作,那么用户界面将会冻结而不在被响应,而出现“假死”现象。那么我们就需要使用到线程来解决这个问题 1、什么是进程? 电脑中时会有很多单独运行的程序,每个程序有一个独立的进程,而进程之间是相互独立存在的。 广义上是指正在运行的程序实例,狭义上说指的是程序被加载到内存中执行的后得到的进程。 每个进程都会有4G的内存空间。 一个程序可以有多个进

u012670181的博客 1739
上一篇: Qt多线程笔记 (1)
下一篇: 信号槽传送结构体笔记
QQ_278397935
博客等级 码龄18年 120粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值