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

长沙申请域名网站备案网站模版防被偷

长沙申请域名网站备案,网站模版防被偷,12333上海公共招聘网官网,花生壳盒子做网站服务器系列文章目录 Qt开发笔记#xff08;一#xff09;Qt的基础知识及环境编译#xff08;泰山派#xff09; Qt学习笔记#xff08;二#xff09;Qt 信号与槽 Qt学习笔记#xff08;三#xff09;网络编程 Qt学习笔记#xff08;四#xff09;多线程 文章目录 系列文章…系列文章目录 Qt开发笔记一Qt的基础知识及环境编译泰山派 Qt学习笔记二Qt 信号与槽 Qt学习笔记三网络编程 Qt学习笔记四多线程 文章目录 系列文章目录前言一、QThead1.1 QThead的引入1.2 相关API1.3 QThread的工作流程 二、继承QThread的代码实现 前言 在Qt中多线程的处理一般是通过QThread类来实现。QThread代表一个在应用程序中可以独立控制的线程也可以和进程中的其他线程共享数据。之前我们在Linux应用篇中提到过多线程的概念使用它的好处是可以同时操作好几个目标而不是因为上一个目标未结束使得需要的操作陷入阻塞状态。 一、QThead 1.1 QThead的引入 QThread 提供了线程启动、停止以及与其他对象通信的能力我们可以利用主线程用于处理 GUI 操作而长时间的耗时任务如文件 I/O、网络请求、大数据处理等可以放到其他线程中去执行从而避免界面卡顿现象。QThread 是 Qt 提供的一个线程管理类封装了原生的线程接口使得线程的创建、启动、终止和通信更加直观和方便。   QThread 线程类是实现多线程的核心类。Qt有两种多线程的方法其中一种是继承QThread的run()函数另外一种是把一个继承于QObject的类转移到一个Thread里。两种方法区别不大用起来都比较方便但继承QObject的方法更加灵活笔者这里偏向前者。  继承QThread   继承QThread是创建线程的一个普通方法。其中创建的线程只有run()方法在线程里的。其他类内定义的方法都在主线程内。   通过上面的图我们可以看到主线程内有很多方法在主线程内但是子线程只有 run()方法是在子线程里的。run()方法是继承于QThread类的方法用户需要重写这个方法一般是把耗时的操作写在这个run()方法里面。  继承QObject的线程   与上一种方法不同我们先写一个类继承 QObject通过QObject::moveToThread()方法将它移到一个QThread线程里执行。那么可以通过主线程发送信号去调用QThread线程的方法如上图的fun4()fun5()等等。这些方法都是在QThread线程里执行的。 1.2 相关API 函数名描述run()线程入口函数start()通过调用run()函数开始执行线程操作系统根据优先级参数调度线程currentThread()返回一个指向 管理当前执行线程 的QThread的指针isRunning()若线程正在运行返回true否则返回falsesleep()/msleep()/usleep()实现线程休眠单位为秒/毫秒/微秒wait()阻塞线程quit()请求线程退出事件循环常用于安全关闭线程。finished()当线程结束时会发出该信号可以通过该信号来实现线程的清理工作 注使用wait()函数后线程会阻塞至直到满足以下任何一个条件 与此QThread对象关联的线程已经完成执行即当它从run()返回时若线程已经完成这个函数将返回true若线程尚未启动也返回true已经过了几毫秒若时间是ULONG_MAX默认值那么等待永远也不会超时线程必须从run()返回若等待超时此函数返回false与POSIX pthread_join() 函数类似terminate()| 终止线程的执行。线程可以立即终止也可以不立即终止取决于操作系统的调度策略。在terminate()之后使用QThread::wait()来确保终止 1.3 QThread的工作流程 就像前面提到的笔者偏向继承QThread的写法这里以这种为主。QThread 的核心流程是创建一个线程对象将任务移动到该线程然后启动线程以执行任务。QThread 内部维护了一个事件循环确保线程可以响应事件和信号槽的触发。线程启动时自动调用 run() 方法线程结束时会发送 finished 信号。 定义一个类继承 QThread 并重写 run() 函数线程处理函数里面写入需要执行的复杂数据处理需要注意以下几点  - 确定 run() 函数需要执行的具体数据处理任务例如文件读取、数据分析、图像处理、网络请求等。  - 处理流程设计在 run() 中合理设计任务处理流程比如是否需要循环、数据的预处理和后处理、错误处理等。  - 线程间通信在任务处理过程中可能需要将进度、结果或错误状态传递回主线程。可以使用信号槽机制实现这些交互。  - 资源释放确保在任务完成时清理分配的资源以防止内存泄漏或资源占用。使用对象调用 start() 函数来启动线程定义一个信号通知主线程执行完成线程关闭与资源清理 二、继承QThread的代码实现 代码部分也是利用前段时间写的毕设拯救计划二基于QT的智能家居Onenet云中的代码演示它主要是在 Qt 中使用 QThread 可以让 DHT11 的数据读取在后台线程中执行从而避免阻塞主界面线程。如果大家不会dht11的话可以看一下笔者之前写的驱动Linux驱动开发笔记五 基于设备树与GPIO子系统含单总线的操作实验。   首先新建一个类 DHT11ReaderThread继承 QThread 并实现数据读取逻辑。 // dht11readerthread.h #ifndef DHT11READERTHREAD_H #define DHT11READERTHREAD_H#include QThread #include QStringclass DHT11ReaderThread : public QThread {Q_OBJECTpublic:DHT11ReaderThread(QObject *parent nullptr);~DHT11ReaderThread();protected:// QThread 的主执行函数前面提到了我们采用的方式主要是在run函数上void run() override; signals:// 用于发送新数据的信号void newData(QString temperature, QString humidity); private:// 用于控制线程的运行状态bool keepRunning; };#endif // DHT11READERTHREAD_H在 dht11readerthread.cpp的run函数中实现 DHT11 的数据读取逻辑并在读取到数据后通过信号发送给主线程。 // dht11readerthread.cpp #include dht11readerthread.h #include dht11.h #include QDebugDHT11ReaderThread::DHT11ReaderThread(QObject *parent): QThread(parent), keepRunning(true) {dht11_init(); // 初始化 DHT11 }DHT11ReaderThread::~DHT11ReaderThread() {keepRunning false;dht11_close(); // 关闭 DHT11 }void DHT11ReaderThread::run() {while (keepRunning) {char temperature;char humidity;// 读取 DHT11 数据if (dht11_read(humidity, temperature) 0) {// 将读取到的数据格式化为字符串QString tempStr QString(%1°C).arg((int)temperature);QString humiStr QString(%1%).arg((int)humidity);// 发出信号传递新数据emit newData(tempStr, humiStr);} else {qDebug() Failed to read data from DHT11.;}// 设置线程休眠 5 秒控制读取频率msleep(5000);} }在 MainWindow 的头文件中声明 updateDisplay 槽函数用于接收来自线程的温湿度数据并更新 UI。 // mainwindow.h#ifndef MAINWINDOW_H #define MAINWINDOW_H#include QMainWindowQT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent nullptr);~MainWindow();private slots:void updateDisplay(const QString temperature, const QString humidity); // 更新显示的槽函数private:Ui::MainWindow *ui; };#endif // MAINWINDOW_H在 MainWindow 中创建 DHT11ReaderThread 的实例并连接信号以更新 QTextBrowser。 // mainwindow.cpp#include mainwindow.h #include ui_mainwindow.h #include dht11readerthread.hMainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui-setupUi(this);// 创建 DHT11 读取线程实例DHT11ReaderThread *readerThread new DHT11ReaderThread(this);// 连接线程的信号到更新 QTextBrowser 的槽connect(readerThread, DHT11ReaderThread::newData, this, MainWindow::updateDisplay);// 启动线程readerThread-start(); }MainWindow::~MainWindow() {delete ui; }// 更新 QTextBrowser 显示的槽函数 void MainWindow::updateDisplay(const QString temperature, const QString humidity) {QString displayText QString(Temperature: %1\nHumidity: %2).arg(temperature).arg(humidity);ui-textBrowser-setText(displayText); }注这里强调一下不要在main.cpp和mainwindow.cpp中重复实例化对象。 免责声明本文参考了网上公开的部分资料仅供学习参考使用若有侵权或勘误请联系笔者
http://www.hkea.cn/news/14265773/

相关文章:

  • 东莞网站建设智搜宝营销管理软件
  • 厦门网站seo外包网站关键词选取
  • 偃师建网站那家公司好宜兴建设局 网站
  • 网站去版权seo外链类型有哪些
  • 新乡网站开发昆明
  • 网页设计站点建设实验报告吴江设计网站公司
  • 农产品网站的品牌建设网站建设意见建议
  • 手机怎么登录自己做的网站wordpress lapa
  • 懒人模板网站网站职能
  • 济南建站哪家好网站主页制作
  • 最有效的网站推广公司asp做购物网站
  • 东莞网站设计百年h5页面制作工具包括
  • 优惠券的网站制作wordpress转帝国cms
  • 高端定制网站建设制作wordpress 底部按钮
  • 网站建设接单技巧jsp项目个人网站开发
  • 免费网站一级a做爰在免费线看wordpress速度慢设置
  • 万邦工程管理咨询有限公司厦门seo公司
  • 兴安盟建设局网站深圳建设银行
  • 全屏企业网站七牛云app
  • 内网网站搭建设四川建设网中标候选人公示
  • 网站用户粘性网站推广哪个平台最好
  • 做网站要钱的吗湘潭网站建设建站
  • wordpress更改网站信息苏州网站制作推广
  • 如何修改网站关键词百度电脑怎么用wordpress
  • 建设网站是否需要一个主机wordpress ajax 搜索
  • 个人如何做购物网站 关于支付接口怎样查看别人的网站是怎么建设
  • 邯郸网站设计公司排名怎样做instergram网站营销
  • 网站上展示手机页面是怎么做的制作一个景点的网站
  • 网站空间怎么做做美食网站有哪些
  • 网站搜索引擎优化方案《网站开发实例》pdf下载