当前位置: 首页 > wzjs >正文

pt网站怎么下载与做软件开发哪里学

pt网站怎么下载与做,软件开发哪里学,小米网站seo分析报告+书,长宁区网站建设开Qt 多线程的两种实现方式 1. 从QThread类继承再重写 run 函数 实现流程: 继承自QThread类重写run函数,其中run函数里面的代码为线程的执行代码调用start函数启动线程 程序示例: WorkThread.h 文件 #ifndef WORKTHREAD_H #define WORKTH…

Qt 多线程的两种实现方式

1. 从QThread类继承再重写 run 函数

实现流程:

  1. 继承自QThread类
  2. 重写run函数,其中run函数里面的代码为线程的执行代码
  3. 调用start函数启动线程

程序示例:

  • WorkThread.h 文件
#ifndef WORKTHREAD_H
#define WORKTHREAD_H#include <QThread>class WorkThread : public QThread
{Q_OBJECT
public:explicit WorkThread(QObject *parent = nullptr);~WorkThread();public:void StartThread();void StopThread();void TerminateThread();protected:void run() override;				// 重写run函数private:void DealValue(int& nValue);signals:void SignalSendValue(QString, int);private:bool m_bRunFlag;};#endif // WORKTHREAD_H
  • WorkThread.cpp 文件
#include "WorkThread.h"
#include <QDebug>WorkThread::WorkThread(QObject *parent) : QThread(parent), m_bRunFlag(false)
{}WorkThread::~WorkThread()
{qDebug() << "Release WorkThread!";
}void WorkThread::StartThread()
{m_bRunFlag = true;start();
}void WorkThread::StopThread()
{m_bRunFlag = false;quit();wait();
}void WorkThread::TerminateThread()
{terminate();wait();
}void WorkThread::run()
{int nValue = 0;while (m_bRunFlag){DealValue(nValue);Qt::HANDLE hHandle = QThread::currentThreadId();emit SignalSendValue(QString::number(reinterpret_cast<quintptr>(hHandle), 16), nValue);QThread::msleep(100);}
}void WorkThread::DealValue(int &nValue)
{nValue++;if (nValue > 100)nValue = 1;
}
  • MainWindow.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include "WorkThread.h"QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:void SlotRecieveValue(QString strThreadID, int nValue);private slots:void on_btnStart_clicked();void on_btnStop_clicked();void on_btnTerminate_clicked();private:Ui::MainWindow *ui;WorkThread* m_pWorkThread;
};
#endif // MAINWINDOW_H
  • MainWindow.cpp文件
#include "MainWindow.h"
#include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);ui->labelMainThreadID->setText(QString("Thread ID = 0x%1").arg(QString::number(reinterpret_cast<quintptr>(QThread::currentThreadId()), 16)));m_pWorkThread = new WorkThread(this);connect(m_pWorkThread, &WorkThread::SignalSendValue, this, &MainWindow::SlotRecieveValue);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::SlotRecieveValue(QString strThreadID, int nValue)
{ui->labelValue->setText(QString("Thread ID = 0x%1, Value = %2").arg(strThreadID).arg(nValue));
}void MainWindow::on_btnStart_clicked()
{m_pWorkThread->StartThread();
}void MainWindow::on_btnStop_clicked()
{m_pWorkThread->StopThread();
}void MainWindow::on_btnTerminate_clicked()
{m_pWorkThread->TerminateThread();
}

2. 使用QObject::moveToThread()函数

实现流程:

  1. 创建一个工作类继承自QObject;
  2. 创建一个工作类线程对象和一个QThread对象,调用QObject::moveToThread()将工作对象移至线程中;
  3. 调用QThread对象的start函数,通过发送信号,后续工作对像的槽函数都会在独立的线程中执行;

文字解释流程相对比较抽象,下面看一个基于上面例子改造的示例;

  • ThreadWorker.h 文件 (线程工作者对象)
#ifndef THREADWORKER_H
#define THREADWORKER_H#include <QObject>class ThreadWorker : public QObject
{Q_OBJECTpublic:explicit ThreadWorker(QObject *parent = nullptr);~ThreadWorker();public:void SetRunFlag(bool bRunFlag);public slots:void SlotDoWork();          // 槽函数,通过外部的信号关联,其执行会在独立的线程中private:void DealValue(int& nValue);signals:void SignalDoWork();void SignalSendValue(QString, int);private:bool m_bRunFlag;
};#endif // THREADWORKER_H
  • ThreadWorker.cpp 文件
#include "ThreadWorker.h"
#include <QDebug>
#include <QThread>ThreadWorker::ThreadWorker(QObject *parent) : QObject(parent), m_bRunFlag(false)
{}ThreadWorker::~ThreadWorker()
{qDebug() << "Release ThreadWorker!";
}void ThreadWorker::SetRunFlag(bool bRunFlag)
{m_bRunFlag = bRunFlag;
}void ThreadWorker::SlotDoWork()
{int nValue = 0;while (m_bRunFlag){DealValue(nValue);Qt::HANDLE hHandle = QThread::currentThreadId();emit SignalSendValue(QString::number(reinterpret_cast<quintptr>(hHandle), 16), nValue);QThread::msleep(100);}
}void ThreadWorker::DealValue(int &nValue)
{nValue++;if (nValue > 100)nValue = 1;
}
  • MainWindow.h 文件
#ifndef WORKTHREAD_H
#define WORKTHREAD_H#include <QThread>class WorkThread : public QThread
{Q_OBJECT
public:explicit WorkThread(QObject *parent = nullptr);~WorkThread();public:void StartThread();void StopThread();void TerminateThread();protected:void run() override;private:void DealValue(int& nValue);signals:void SignalSendValue(QString, int);private:bool m_bRunFlag;};#endif // WORKTHREAD_H
  • MainWindow.cpp 文件
#include "WorkThread.h"
#include <QDebug>WorkThread::WorkThread(QObject *parent) : QThread(parent), m_bRunFlag(false)
{}WorkThread::~WorkThread()
{qDebug() << "Release WorkThread!";
}void WorkThread::StartThread()
{m_bRunFlag = true;start();
}void WorkThread::StopThread()
{m_bRunFlag = false;quit();wait();
}void WorkThread::TerminateThread()
{terminate();wait();
}void WorkThread::run()
{int nValue = 0;while (m_bRunFlag){DealValue(nValue);Qt::HANDLE hHandle = QThread::currentThreadId();emit SignalSendValue(QString::number(reinterpret_cast<quintptr>(hHandle), 16), nValue);QThread::msleep(100);}
}void WorkThread::DealValue(int &nValue)
{nValue++;if (nValue > 100)nValue = 1;
}

在这里插入图片描述


文章转载自:

http://O0s6nNxV.nggbf.cn
http://sZxIAsNK.nggbf.cn
http://K07xUJq9.nggbf.cn
http://a4ANvnTg.nggbf.cn
http://Lxr5Qo3i.nggbf.cn
http://ljrkfKzh.nggbf.cn
http://05KbVxcw.nggbf.cn
http://nxrV8RwB.nggbf.cn
http://tHahreMx.nggbf.cn
http://YZIAqtLj.nggbf.cn
http://rINOkeDJ.nggbf.cn
http://72bD9tpA.nggbf.cn
http://mrWio753.nggbf.cn
http://xVOgKO37.nggbf.cn
http://fsb9Wwb9.nggbf.cn
http://88upw2VX.nggbf.cn
http://2xRxq2EB.nggbf.cn
http://rfvHtbzm.nggbf.cn
http://v0GhlrGF.nggbf.cn
http://wguJapHa.nggbf.cn
http://2w0qxF89.nggbf.cn
http://MSKJPLVF.nggbf.cn
http://Y2ph3LGr.nggbf.cn
http://VxbZ7Loq.nggbf.cn
http://RalxlvtA.nggbf.cn
http://40keB9zM.nggbf.cn
http://DzdCf8Fk.nggbf.cn
http://HUMqaN3S.nggbf.cn
http://SDZlHkG6.nggbf.cn
http://sSA3vdG0.nggbf.cn
http://www.dtcms.com/wzjs/763741.html

相关文章:

  • 有哪些好用的网站唐山个人网站建设
  • 网站建设怎么添加视频苏州交通网站建设
  • 风景旅游网站建设的设计思路网络设计工程师是干什么的
  • 网站如何提高权重下载站用什么cms
  • 网站设计制作费用wordpress 产品分类
  • 制作简历网站开发网站建设亇金手指排名十四
  • 浏阳网站开发建设公司形象vi设计
  • 海口网站开发找千素网高端网站建设公司怎么选
  • 网站不兼容怎么办烟台制作小程序的公司
  • xx企业网站建设方案书苏州公司网站建设报价
  • 网站建设营销的技巧跑胡子网站开发
  • 西安网站开发高端网站开发手机网站用什么软件做的好
  • 网站开发创业西安市长安区规划建设局网站
  • 自己有网站怎么做app建立视频网站
  • 文本分析网站设计logo网站免费下载
  • paypal客户端网站建设评价想做电商怎么注册
  • 下载整个网站的软件有哪些网站是可以接单做任务的
  • 网站的专区怎么建设模板规格尺寸
  • 什么网站自己做名片好WordPress来必力
  • 朵以服饰 网站建设全国小微企业名录查询
  • 比较有名的个人网站网站里做任务
  • 湖州公司做网站怎么管理网站的内容
  • 温州网站建设选择乐云seo摄影网站建设任务书
  • 网站被黑能查到是谁做的吗做网站构建
  • 建设维护网站 未签订合同做网站要多少
  • 专业网站建设技术注册进出口贸易公司条件
  • 退役军人事务部网站建设wordpress 首页显示产品
  • 浙江省建设监理管理协会网站外贸英才网
  • 服装时尚网站做三国的网站
  • 网站建设 维护购销合同承德网站建设作用