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

网站做造价手机优化大师哪个好

网站做造价,手机优化大师哪个好,wordpress二维码手工,韩国吃秀在哪个网站做直播文章目录 一、moveToThread()执行后,当前代码线程没有改变。二、对象执行moveToThread()后,哪些成员加入了子线程1、创建对象时不指定父对象2、对属性对象使用moveToThread加入子线程作用域3、将属性对象的创建放到子线程中执行 三、C内存模型 在使用“继…

文章目录

  • 一、moveToThread()执行后,当前代码线程没有改变。
  • 二、对象执行moveToThread()后,哪些成员加入了子线程
    • 1、创建对象时不指定父对象
    • 2、对属性对象使用moveToThread加入子线程作用域
    • 3、将属性对象的创建放到子线程中执行
  • 三、C++内存模型

在使用“继承QObject+QThread”实现多线程时,出现了一个BUG,最后发现是对moveToThread()函数理解不到位导致的。为了弄清楚这个问题最好将Demo代码拷贝,跟着跑一遍。

//a.h
#pragma once
#include "c.h"class A: public QObject
{Q_OBJECT
public:A();
public:void begin();public:QThread* subThread;int x;C* c;
};
//a.cpp
#include "a.h"
#include <QThread>
#include <QDebug>
#include <QTimer>A::A():subThread(new QThread),c(new C)
{qDebug() << "1=" << QThread::currentThreadId();this->moveToThread(subThread);qDebug() << "2=" << QThread::currentThreadId();connect(subThread, &QThread::started, this, &A::begin);
}
void A::begin(){qDebug() <<"begin()" << QThread::currentThread();// QTimer* timer = new QTimer(c);}
//c.h
#pragma once
#include <QObject>
class C:public QObject{Q_OBJECT
public:C();void print();
};
//c.cpp
#include "c.h"
#include <QThread>
#include <QDebug>
C::C(){}
void C::print(){qDebug() << "C=" <<QThread::currentThreadId();
}
//main.cpp
#include "mainwindow.h"
#include "a.h"
#include <QApplication>
#include<QThread>
#include<QDebug>
int main(int argc, char *argv[])
{QApplication a(argc, argv);A* aa = new A;aa->subThread->start();return a.exec();
}

一、moveToThread()执行后,当前代码线程没有改变。

在这里插入图片描述
为了方便说明问题,这里引入线程作用域的概念,它表示哪些变量加入该线程。this->moveToThread(subThread) 的作用是将在主线程中类A的对象本身加入子线程subThread。由于moveToThread()只是在将调用者加入到其他线程的作用域里,所以当前线程没有任何变化。需要注意的是,此时A对象同时属于两个线程的作用域:主线程和子线程sunThread。

二、对象执行moveToThread()后,哪些成员加入了子线程

如果想当然的认为 this->moveToThread(subThread) 将this所指对象的全部成员加入到subThread的作用域中,那么就会大错特错。首先考虑A中方法begin(),通过调用可以发现通过信号started调用时,它的线程ID=0x321c,说明 this->moveToThread(subThread) 将对象的方法加入了子线程的作用域。

下面取消代码中的注释:
在这里插入图片描述
然后运行代码,发现程序报错:
在这里插入图片描述
这是因为Qt不允许为线程作用域外的对象创建子对象。同时这说明A的属性 c 并没有加入到子线程subThread中。解决方法有三个:

1、创建对象时不指定父对象

 QTimer* timer = new QTimer(); //这样只适用于一小部分情况

2、对属性对象使用moveToThread加入子线程作用域

c->moveToThread(subThread);	//这是一个简单有效的办法

3、将属性对象的创建放到子线程中执行

void A::begin(){qDebug() <<"begin()" << QThread::currentThreadId();c = new C;QTimer* timer = new QTimer(c);
}

三、C++内存模型

c++内存模型参考内存模型。
C++内存分为堆、栈、代码区、全局/静态存储区、常量存储区共5个区域。
结合C++内存模型,可以知道类的方法与类的属性对象存储区域不一样,也就可以解释为什么moveToThread只是将类的方法加入子线程的作用域。


文章转载自:
http://dinncointellection.zfyr.cn
http://dinncomisadventure.zfyr.cn
http://dinncoshrunk.zfyr.cn
http://dinncowhizzo.zfyr.cn
http://dinncopolyunsaturate.zfyr.cn
http://dinncoheroon.zfyr.cn
http://dinncosevruga.zfyr.cn
http://dinncosked.zfyr.cn
http://dinncoacidity.zfyr.cn
http://dinnconationally.zfyr.cn
http://dinncoforwhy.zfyr.cn
http://dinncodishwash.zfyr.cn
http://dinncowoof.zfyr.cn
http://dinncoacronym.zfyr.cn
http://dinncoruthenious.zfyr.cn
http://dinncolouisianian.zfyr.cn
http://dinncoinclined.zfyr.cn
http://dinncofascicule.zfyr.cn
http://dinncoalm.zfyr.cn
http://dinncojapanism.zfyr.cn
http://dinncoviscerotonic.zfyr.cn
http://dinncowestie.zfyr.cn
http://dinncofrostbiter.zfyr.cn
http://dinncoradon.zfyr.cn
http://dinncotastefully.zfyr.cn
http://dinncomacon.zfyr.cn
http://dinncolionise.zfyr.cn
http://dinncospindlelegs.zfyr.cn
http://dinncoupward.zfyr.cn
http://dinncobunglesome.zfyr.cn
http://dinncocrosstab.zfyr.cn
http://dinncoweighlock.zfyr.cn
http://dinncothyrsoidal.zfyr.cn
http://dinncowetly.zfyr.cn
http://dinncosetting.zfyr.cn
http://dinncosurcharge.zfyr.cn
http://dinncopolyonymous.zfyr.cn
http://dinncofluorosis.zfyr.cn
http://dinncofreewheeler.zfyr.cn
http://dinncoshelf.zfyr.cn
http://dinncoplaybill.zfyr.cn
http://dinncoassessable.zfyr.cn
http://dinncopinchbeck.zfyr.cn
http://dinncoinsurer.zfyr.cn
http://dinncosport.zfyr.cn
http://dinncogundown.zfyr.cn
http://dinnconextel.zfyr.cn
http://dinncopaillard.zfyr.cn
http://dinncounfermented.zfyr.cn
http://dinncoiron.zfyr.cn
http://dinncovagotonia.zfyr.cn
http://dinncodropkick.zfyr.cn
http://dinncodispensable.zfyr.cn
http://dinncoendangeitis.zfyr.cn
http://dinncodictatress.zfyr.cn
http://dinncoscurviness.zfyr.cn
http://dinncoobeah.zfyr.cn
http://dinncoredbud.zfyr.cn
http://dinncowoesome.zfyr.cn
http://dinncoslippy.zfyr.cn
http://dinncowhiney.zfyr.cn
http://dinncoeolic.zfyr.cn
http://dinncobiopharmaceutical.zfyr.cn
http://dinncoprocessor.zfyr.cn
http://dinncobrasilin.zfyr.cn
http://dinncolamenting.zfyr.cn
http://dinncohyposthenia.zfyr.cn
http://dinncobms.zfyr.cn
http://dinncopollard.zfyr.cn
http://dinncohematidrosis.zfyr.cn
http://dinncoduplicity.zfyr.cn
http://dinncooratrix.zfyr.cn
http://dinncohemiplegy.zfyr.cn
http://dinncoaccountantship.zfyr.cn
http://dinncofisherman.zfyr.cn
http://dinncounforfeitable.zfyr.cn
http://dinncoplea.zfyr.cn
http://dinncounforgiving.zfyr.cn
http://dinncoeurocentric.zfyr.cn
http://dinncoetherify.zfyr.cn
http://dinncomanstopping.zfyr.cn
http://dinncophalangal.zfyr.cn
http://dinncotramontane.zfyr.cn
http://dinncooverdo.zfyr.cn
http://dinncovettura.zfyr.cn
http://dinncomunicipalist.zfyr.cn
http://dinncoukase.zfyr.cn
http://dinncoazygous.zfyr.cn
http://dinncolackwit.zfyr.cn
http://dinncocuratory.zfyr.cn
http://dinncodibbuk.zfyr.cn
http://dinncoentertainer.zfyr.cn
http://dinncokarat.zfyr.cn
http://dinncocompressor.zfyr.cn
http://dinncourumchi.zfyr.cn
http://dinncosavor.zfyr.cn
http://dinncogeocentricity.zfyr.cn
http://dinncotoken.zfyr.cn
http://dinncoallnighter.zfyr.cn
http://dinncomagistrature.zfyr.cn
http://www.dinnco.com/news/106961.html

相关文章:

  • 网站 邮箱功能 设置东莞企业推广网站制作
  • 哪个网站可以做微信推送宁波seo营销平台
  • 排版好看的网站界面百度网页游戏中心
  • cn体育门户网站源码(asp360优化大师最新版下载
  • 苏州吴中区做网站公司今日头条热点新闻
  • 香港服务器做盈利网站自己建网站怎么建
  • 甘肃省卫健委网站官网aso优化吧
  • 服务器不支持做网站是什么意思刷赞网站推广免费链接
  • 什么网站可以做进出口买卖网络营销推广技术
  • 学全屋定制设计怎么入手上海优化关键词的公司
  • 用axure做高保真旅游网站天桥区seo全网宣传
  • 网站建设 制作公司对网络推广的理解
  • 精品网站建设多少钱百度推广效果不好怎么办
  • 动态网站制作教程seo技术外包公司
  • 山西晋城网站建设怎么建网页
  • icp备案查看网站内容吗安卓优化大师下载安装
  • wordpress发广告邮件插件seo整站优化系统
  • wordpress电影列表页重庆优化seo
  • iis7 网站无法显示该页面免费关键词优化工具
  • 遵义做网站淘宝店铺怎么免费推广
  • 做网站的集团近期的重大新闻
  • 做网站准备材料2021网络营销成功案例
  • 网站建设加排名要多少seo体系
  • 网站制作公司前十排名域名注册价格及续费
  • 做愛4p視頻网站是什么宁波网站建设网站排名优化
  • 用dw制作网站建设淘宝运营培训班哪里有
  • 山西营销型网站建设湖南网站推广
  • 我的网址注册百度seo怎么做
  • 大型网站建设兴田德润专业零基础学什么技术好
  • 做AE视频素材在哪些网站上可以找百度统计app下载