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

麻章手机网站建设公司seo是一种利用搜索引擎

麻章手机网站建设公司,seo是一种利用搜索引擎,军事新闻最新消息中国下载,正规seo服务商每一个线程自带事件循环 线程函数,不会在main的事件循环中执行 所以,我们碰到比较耗时的操作,我们就可以把这个操作放到线程中去完成,避免程序一卡一卡的 线程类:QThread 只要创建出一个QThread对象,就会…

每一个线程自带事件循环
线程函数,不会在main的事件循环中执行
所以,我们碰到比较耗时的操作,我们就可以把这个操作放到线程中去完成,避免程序一卡一卡的

线程类:QThread

只要创建出一个QThread对象,就会立刻创建出一个线程
只不过该线程没有开始运行而已 

QThread* thread = new QThread(this)

QThread线程如何运行

thread->start();

即使没写线程主函数,线程依旧能够正常运行

QThread start之后,会做一个判断:
if(有没有写线程主函数 == 1){
    运行线程主函数
}else{
    运行线程的事件循环

线程的2条使用路径

写一个线程主函数

QThread 类有虚函数run

只要重写了run函数,就相当于写了一个线程主函数

那么当 线程.start()之后,就会运行这个run函数

所以,我们要写一个 myThread,继承QThread,就可以重写myThread的run函数了

那么创建线程的时候,就不要再创建QThread了,而是创建myThread

QT、c的线程区别

1:一个QThread或者一个myThread,只会有一个线程
2:c语言线程,只要线程主函数结束运行,线程就结束运行了,剩下的就是资源回收的问题
QT线程,只要QThread对象一直存在,线程就一直存在,无论run函数是否结束
如果run函数结束运行了,想要重新运行的话,重新start就好了
3:c语言线程,只要有地址,什么数据都能访问
QT线程,不允许跨线程访问ui界面中的窗口的

线程如何结束运行

thread->terminate();

#ifndef MYTHREAD_H
#define MYTHREAD_H#include<QThread>#include<QScreen>
#include<QApplication>
#include<QPixmap>class myThread : public QThread
{Q_OBJECT
public:myThread(QObject*parent);void run() override;QScreen* screen;
signals:void sndSignal(QPixmap pic);
};#endif // MYTHREAD_H
#include "mythread.h"myThread::myThread(QObject*parent):QThread(parent){screen=QApplication::primaryScreen();
}
void myThread::run(){while(1){QPixmap pic=screen->grabWindow(0);emit sndSignal(pic);QThread::usleep(100);}
}
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include"mythread.h"QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void rcvSig(QPixmap pic);void on_pushButton_clicked();void on_pushButton_2_clicked();private:Ui::Widget *ui;myThread *thread;
};
#endif // WIDGET_H#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);thread =new myThread(this);QObject::connect(thread,&myThread::sndSignal,this,&Widget::rcvSig);
}
void Widget::rcvSig(QPixmap pic){ui->textEdit->append("hahha");pic=pic.scaled(ui->label->size());ui->label->setPixmap(pic);
}void Widget::on_pushButton_clicked()
{thread->start();
}
void Widget::on_pushButton_2_clicked()
{thread->terminate();
}
Widget::~Widget()
{delete ui;
}

 

将一个事件,移动到线程的事件循环中去执行

QObject::moveToThread(目标线程地址 t)
谁调用这个函数,谁的所有事件,都会被移动到t的事件循环中去执行

但是,moveToThread()有限制:

1:调用moveToThread函数的组件,必须直接继承QObject,不能继承自QWidget 获取其他基类 2:调用moveToThread函数的组件,不能有父组件
所以,要自己写一个类,直接继承自QObject,还不能有父组件

class Worker : public QObject {Q_OBJECT
public slots:void doWork() {// 耗时操作emit workFinished();}
signals:void workFinished();
};QThread* thread = new QThread;
Worker* worker = new Worker;
worker->moveToThread(thread);
connect(thread, &QThread::started, worker, &Worker::doWork);
connect(worker, &Worker::workFinished, thread, &QThread::quit);
connect(worker, &Worker::workFinished, worker, &Worker::deleteLater);
connect(thread, &QThread::finished, thread, &QThread::deleteLater);
thread->start();

http://www.dtcms.com/wzjs/84115.html

相关文章:

  • 网站制作做站长挣钱社群营销
  • 如何做英文ppt模板下载网站竞价排名机制
  • 门户网站优化英文外链代发
  • 汽车网站建设方案大学生网页设计作业
  • 苏州企业建站程序营销型网站建设的主要流程包括
  • kesion系统做网站教程搜索量查询百度指数
  • 网站建设定义是什么网络推广方法技巧
  • 商场设计任务书seo刷关键词排名工具
  • asp.net做毕业设计网站百度下载并安装
  • s浏览器草根seo博客
  • 最好用的网站推广经验seo方式包括
  • 深圳高端网站建设费用百度引擎的搜索方式是什么
  • 广州企业网站友情链接只有链接
  • 成都市建设局网站seo按天计费系统
  • 用户体验的重要性沈阳seo整站优化
  • 一个公司可以做几个网站吗杭州网站seo推广软件
  • 多媒体制作专业学什么优化教程
  • 网站设计报告模板及范文seo外链代发
  • 网站建设背景怎么写yy直播
  • 江苏省工程建设协会网站网络平台推广运营有哪些平台
  • wordpress 使用smtp宁波核心关键词seo收费
  • 旅游做哪个网站好网站制作公司有哪些
  • 做ppt的网站兼职百度最新版下载
  • 公司的网站建设 交给谁做更好些好视通视频会议app下载安装
  • 电商网站建设应用在哪里找软件开发公司
  • 网游大型游戏排行榜朝阳区seo搜索引擎优化怎么样
  • 网站的数据库选择西安网站关键词优化费用
  • 东莞建网站公司游戏代理是怎么赚钱的如何代理游戏
  • 汉中微信网站建设公司seo顾问多少钱
  • 网络推广模板网站宁波seo网络推广咨询价格