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

长宁苏州网站建设公司seo行业

长宁苏州网站建设公司,seo行业,商务网站设计,海南自贸区Qt - 进程/线程 补充进阶 多线程quit / eixt / terminate QThread例子tdicethread 类.h.cpp widget 类.h.cpp 线程同步 多线程 quit / eixt / terminate quit 应用程序或线程安全的取消事件处理队列的执行,并随后使线程退出(如果只希望结束线程并保证它…

Qt - 进程/线程 补充进阶

  • 多线程
    • quit / eixt / terminate
  • QThread例子
    • tdicethread 类
      • .h
      • .cpp
    • widget 类
      • .h
      • .cpp
  • 线程同步

多线程

quit / eixt / terminate

quit

应用程序或线程安全的取消事件处理队列的执行,并随后使线程退出(如果只希望结束线程并保证它安全的清理资源,最好使用quit)
当调用quit()方法时,线程会等待一段时间来完成当前正在运行的任务和冲洗缓存,然后终止线程并发出finished()信号,告诉其他对象该线程已终止
如果线程正在执行事件循环,则该函数会等待事件循环结束后退出线程(如果线程没有运行时间循环,则该函数不会有任何效果)

eixt

直接停止线程,未处理完的事件将被丢弃并静默忽略
该方法没有给予线程任何机会来清理自己的资源和数据,并可能导致应用程序的崩溃(尽量避免使用此方法)
该方法不管线程是否在事件循环中运行,会发送一个finished信号以通知线程已经退出

terminate

可以强制终止一个线程,但是相比exit更加暴力
该方法会强制关闭线程并释放正在使用的所有资源,可以在某些情况下正常处理一个卡住的线程,但也可能导致数据丢失、资源泄漏以及应用程序不稳定(尽量避免使用该方法)

QThread例子

掷骰子

在这里插入图片描述
在这里插入图片描述

tdicethread 类

.h

#ifndef TDICETHREAD_H
#define TDICETHREAD_H#include <QObject>
#include <QThread>
#include <QRandomGenerator>class TDiceThread : public QThread
{Q_OBJECT
public:explicit TDiceThread(QObject *parent = nullptr);void diceBegin(); // 开始投骰子void dicePause(); // 暂停投void stopThread(); //  结束线程signals:void newValue(int seq,int diceValue); // 产生新点数的信号private:int m_seq=0; //int m_diceValue; // 骰子点数bool m_paused=true; // 暂停投骰子bool m_stop=false; // 停止线程 退出runprotected:void run();
};#endif // TDICETHREAD_H

.cpp

#include "tdicethread.h"TDiceThread::TDiceThread(QObject *parent): QThread{parent}
{}void TDiceThread::diceBegin() // 开始投骰子
{m_paused=false;
}void TDiceThread::dicePause() // 暂停投
{m_paused=true;
}void TDiceThread::stopThread() //  结束线程
{m_stop=true;
}void TDiceThread::run()
{m_stop=false;m_paused=true;while (!m_stop){if (!m_paused){m_diceValue=QRandomGenerator::global()->bounded(1,7); // 生成随机数m_seq++;emit newValue(m_seq,m_diceValue); //发送信号}msleep(500); // 线程休眠500ms}quit(); // m_stop==true时结束线程任务 等价于exit(0)
}

widget 类

.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QCloseEvent>
#include "tdicethread.h"QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;TDiceThread *threadA; // 工作线程protected:void closeEvent(QCloseEvent *event);private slots:void threadA_started();void threadA_finished();void threadA_newValue(int seq,int diceValue);void on_pushButton_clicked();void on_pushButton_2_clicked();void on_pushButton_3_clicked();void on_pushButton_4_clicked();
};
#endif // WIDGET_H

.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);threadA=new TDiceThread(this);connect(threadA,&TDiceThread::started,this,&Widget::threadA_started); // started信号继承自QThreadconnect(threadA,&TDiceThread::finished,this,&Widget::threadA_finished); // finished信号继承自QThreadconnect(threadA,&TDiceThread::newValue,this,&Widget::threadA_newValue); // 通过信号和槽传递参数}Widget::~Widget()
{delete ui;
}void Widget::threadA_started()
{qDebug()<<"====== threadA started ======";
}
void Widget::threadA_finished()
{qDebug()<<"====== threadA finished ======";
}void Widget::threadA_newValue(int seq,int diceValue)
{QString str=QString::asprintf("the %d times, point num is:%d",seq,diceValue);qDebug()<<str;
}void Widget::closeEvent(QCloseEvent *event)
{qDebug()<<"try to close main window";if (threadA->isRunning()){threadA->terminate(); // 强制终止线程threadA->wait(); // 等待子线程结束完成,主线程再执行}event->accept();
}void Widget::on_pushButton_clicked()
{qDebug()<<"start threadA";threadA->start();
}void Widget::on_pushButton_2_clicked()
{qDebug()<<"quit threadA";threadA->stopThread(); // 内部自动调用quit()
}void Widget::on_pushButton_3_clicked()
{qDebug()<<"start task";threadA->diceBegin();
}void Widget::on_pushButton_4_clicked()
{qDebug()<<"pause task";threadA->dicePause();
}

线程同步

http://www.tj-hxxt.cn/news/125463.html

相关文章:

  • 美工网站设计优化营商环境条例全文
  • 如何免费做网站网页口碑营销
  • 宁波医院网站建设百度推广网址
  • 安徽省政府网站官网百度一下你就知道啦
  • 郑州做网站天强科技学电脑办公软件培训班
  • 网站建设保教公关负面处理公司
  • 手工做衣服网站有哪些东莞新闻头条新闻
  • 饶平网站建设公司百度推广手机登录
  • 网站建设需要软件武汉seo网站排名优化
  • 淘宝客云建站官网关键词推广软件
  • 帝国cms如何做电影网站在线crm网站
  • 如何做网站热线电话天津seo排名效果好
  • 西安网站建设公广州网站优化公司
  • 阿里云域名购买流程关键词排名手机优化软件
  • 宁波制作手机网站全网营销推广软件
  • 做彩铃网站软文批发网
  • 建模网站素材正规seo排名外包
  • 网站开发的技术总结seo教程seo官网优化详细方法
  • 英语作文网站今天全国31个省疫情最新消息
  • 有哪些可以在线做app的网站有哪些seo属于什么
  • 上海seo公司哪家好seo网站关键词优化
  • 网站建设需要哪些东西哈尔滨seo推广
  • 海北wap网站建设网络营销专业技能
  • 宁波市住房和城乡建设局seo搜狗排名点击
  • 分辨率大于1920的网站怎么做营销平台
  • 网站建设网络推广图片产品怎么在网上推广
  • 58.搜房等网站怎么做效果才好精准营销及推广
  • 塑胶原料东莞网站建设汕头网站快速优化排名
  • 南京电商网站建设全网优化推广
  • 小程序公司排名前十seo诊断方法步骤