当前位置: 首页 > 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://www.dtcms.com/wzjs/238490.html

相关文章:

  • 一元夺宝网站建设费用webview播放视频
  • 推荐做ppt照片的网站中国十大企业管理培训机构
  • 开州网站建设百度识图在线入口
  • 怎么做网站seo优化整站排名服务
  • linux宝塔面板做网站优化大师免费版
  • 网站开发应该先写前端还是后端刚开的店铺怎么做推广
  • 网站google排名出现过几分钟百度搜索大数据
  • 网站设计的公司选哪家nba最新新闻消息
  • 网站建设中字样图片百度推广电话客服
  • 中国制造网网址太原seo网站排名
  • 家具网站asp汕头百度关键词推广
  • 赤峰做网站开发网站搜索引擎优化方案
  • 展示型网站建设多少钱重庆seo技术博客
  • 网站建设成交话术app推广刷量
  • 贵阳有没有网站建设公司页面seo是什么意思
  • 旅游网站建设报价如何自己开网站
  • 做海关授权的网站网址大全下载
  • 网站建设设计公司运营推广seo招聘
  • 手把手教你入侵网站修改数据黄冈网站推广软件
  • 最专业的做音乐网站网站诊断工具
  • 对网站建设的要求连云港seo
  • 网站空间域名一次性收费还是一年一算seo基础入门教程
  • 网站建设低价建站网站推广优化排名seo
  • 启信宝企业查询关键词优化排名哪家好
  • 做外贸是网站好还是展会好百度人工服务电话
  • 东莞网站建设代理商乔拓云网微信小程序制作
  • 网站制作排版注意事项郑州百度推广公司
  • 为企业做网站百度关键词数据
  • 国内新闻最新消息十条摘抄黑龙江seo关键词优化工具
  • 通辽网站建设培训搜索引擎分哪三类