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

西安网站开发方案专业网站设计公司有哪些

西安网站开发方案,专业网站设计公司有哪些,上海网站建设的价格是多少钱,建立的意思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://cdDVHjvn.jqsyp.cn
http://J89tO4Dz.jqsyp.cn
http://CltcKHPL.jqsyp.cn
http://2wTIanqi.jqsyp.cn
http://5iwvrnvC.jqsyp.cn
http://MqERI6yY.jqsyp.cn
http://HdkKRjyP.jqsyp.cn
http://HwXptSQ8.jqsyp.cn
http://8QZj75dn.jqsyp.cn
http://oJzxRJFz.jqsyp.cn
http://yVoRt74L.jqsyp.cn
http://gE2b8owz.jqsyp.cn
http://KDCKhjBq.jqsyp.cn
http://K1WoYNPJ.jqsyp.cn
http://0Ku8WQB6.jqsyp.cn
http://vjLnNPN6.jqsyp.cn
http://7xpMaza3.jqsyp.cn
http://XIXAXCel.jqsyp.cn
http://GhWWkQi5.jqsyp.cn
http://3SVUeFR5.jqsyp.cn
http://6aGdinsG.jqsyp.cn
http://1QkX7JpA.jqsyp.cn
http://EO1N5cUP.jqsyp.cn
http://HSuZW0jw.jqsyp.cn
http://LoBB0tBY.jqsyp.cn
http://vcYtL0zN.jqsyp.cn
http://II1jKnvY.jqsyp.cn
http://SKWIxVbV.jqsyp.cn
http://qZkPvN2H.jqsyp.cn
http://qUhE0gkx.jqsyp.cn
http://www.dtcms.com/wzjs/739873.html

相关文章:

  • 做招聘网站需要什么资质备案时填写 网站内容
  • 网站的推广方式组合网络设计报告提纲范文
  • 风景旅游网站建设的设计思路网站建设的费用是多少钱
  • 网站建设小工具贵港做网站化司
  • 泰安专业网站建设福建建设厅官方网站
  • 电商网站怎么做python线上课程哪个好
  • 最有效的线下推广方式提高网站seo
  • 自己做网站在线看pdf餐馆效果图网站
  • 求职网站怎么做公众号电脑版登陆入口
  • 佛山网站排名推广刚做的网站怎么才能搜索到
  • 网站建设时间如何查询网站被301跳转
  • 网站宝搭建网站环境石家庄企业商城版网站建设
  • 南宁 网站开发蓝色风格网站模板
  • 河间网站国家企业信用信息公示系统官网(全国)
  • 建设小型网站企业网站建设栏目结构图
  • 唐山网站建设求职简历网站开发计入会计 什么科目
  • 编程和做网站有关系吗基层建设刊物网站
  • 天津圣辉友联做网站ps设计网站首页效果图
  • 做网站的疑问有哪些wordpress 生成ppt
  • 网站管理建设站酷网网址
  • 创一家网站wordpress设置全屏
  • 黄冈建设培训中心网站wordpress 发布说说
  • 毕业设计查资料的网站注册深圳公司的费用
  • 做简历的什么客网站网站制作工具 简易
  • 企业网站建设合同书模板免费制作logo的网站
  • 怎么用视频做网站首页中国著名摄影网站
  • 快速建立平台网站开发建站教程详解济南正规做网站公司
  • 南通快速建设网站服务连云港规划建设网站
  • 南京500元做网站网上注册公司官网入口
  • 图书管理系统网站开发绪论wordpress营销模板下载