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

安全狗 网站打不开论坛网站如何建设

安全狗 网站打不开,论坛网站如何建设,服务专业公司网站建设服务,怎么注册公司要多少钱目录 1. 问题现象 2. 原因分析 3. 解决方法 1. 问题现象 因为业务需求#xff0c;需要利用子线程向主线程发送数据。像这种子线程和主线程进行数据交互时#xff0c;一般都是通过Qt的信号槽机制来实现。如下代码#xff1a; void myClass::doBusiness() {…目录 1. 问题现象        2. 原因分析 3. 解决方法 1. 问题现象        因为业务需求需要利用子线程向主线程发送数据。像这种子线程和主线程进行数据交互时一般都是通过Qt的信号槽机制来实现。如下代码 void myClass::doBusiness() {...... // 其它代码略connect(this, myClass::mySignal, m_pBusiness, CMyBusiness::processBusiness);// 开启业务数据线程auto pDataThread new std::thread(myClass::dataThreadFun, this);...... // 其它代码略}// 数据线程函数 void myClass::dataThreadFun() {// 无限循环一直处理业务while (true){...... // 其它代码略char* p data; // data数据在while的每轮循环中都会被更改emit mySignal(p);} }// 业务处理类位于主线程 void CMyBusiness::processBusiness(char* pData) {// 取出pData做一些处理 } 其中m_pBusiness为CMyBusiness类对象在线程函数dataThreadFun中的以参数p发送信号mySignal以让CMyBusiness类的processBusiness(char* pData)得以执行但测试发现在processBusiness函数中参数pData和mySignal信号发送过来的数据不一样数据被更改了。 2. 原因分析 问题的原因是第5行connect信号槽时采用默认连接方式即Qt::AutoConnection方式Qt官方对该方式的说明如下 (Default) If the receiver lives in the thread that emits the signal, Qt::DirectConnection is used. Otherwise, Qt::QueuedConnection is used. The connection type is determined when the signal is emitted. 即如果接收信号的对象和发送信号的对象位于同一个线程则采取Qt::DirectConnection连接否则就采取Qt::QueuedConnection方式。当信号被发送时Qt会探测以决定采取Qt::DirectConnection连接方式还是采取Qt::QueuedConnection连接方式。 对上面的代码段CMyBusiness即为接收信号的对象m_pBusiness位于主线程发送信号对象位于子线程根据上面的说明所以第5行的connect采取的是Qt::QueuedConnection连接类型。而Qt对Qt::QueuedConnection的解释如下 The slot is invoked when control returns to the event loop of the receivers thread. The slot is executed in the receivers thread. 意思是说当控制返回接收对象的事件循环时槽函数才会被执行槽函数是在接收者所在线程执行的 。也就说Qt::QueuedConnection连接模式就是把信号类似事件放到接收者的事件队列中仅仅只是放入但不是立即执行而是等循环到该信号事件时才执行这就会和上面代码的dataThreadFun表示的子线程产生一个时间差就是在这个时间内数据被更改了其是通过上面代码的22行更改的。 3. 解决方法 解决该问题的方法是上面第5行的connect函数最后一个参数不要采用默认的Qt::AutoConnection连接方式而是采用Qt::BlockingQueuedConnection连接方式。Qt官方对Qt::BlockingQueuedConnection解释如下 Same as Qt::QueuedConnection, except that the signalling thread blocks until the slot returns. This connection must not be used if the receiver lives in the signalling thread, or else the application will deadlock. 意思是说同Qt::QueuedConnection类似唯一不同的是发送信号的线程将会一直阻塞直到接收信号的槽函数执行后才继续往下执行。这种连接方式不能用于接收信号的对象和发送信号对象都在同一个线程的情况否则会引起死锁。 采取Qt::QueuedConnection连接方式后上面的子线程dataThreadFun在发送信号后会阻塞直到CMyBusiness类的processBusiness函数执行后才继续往下执行所以数据就不会被更改。 Qt::BlockingQueuedConnection连接方式不能用于接收信号的对象和发送信号对象都在同一个线程的情况否则会引起死锁这很好理解如果位于同一线程就会造成你等我我也等你大家相互等待对方执行完后再执行就会造成死锁。
http://www.zqtcl.cn/news/336156/

相关文章:

  • 全屏网站 功能丽水市企业网站建设 微信营销 影视拍摄
  • 天天爱天天做视频网站网站推送
  • 制作企业网站与app有什么不同化工企业网站建设
  • 东莞企业推广网站专门做黄漫的网站
  • 温州网站关键词排名优化win10 电脑做网站服务器
  • 网站设计规划信息技术教案营销模式和营销策略
  • 太仓住房城乡建设网站微信怎么注册
  • 德骏网站建设重庆企业网站如何推广
  • 路由器做内部网站服务器石家庄新闻综合频道在线直播回放
  • 怎么给网站备案亚马逊网站建设与维护方法分析
  • 金华网站建设团队产品网络推广方案范文
  • 拼多多刷单网站开发虚拟机可以做两个网站
  • wordpress安装路径和站点地址的设置信通网站开发中心
  • 柳州公司网站建设网站服务商
  • 智能建站实验报告成功营销网站
  • 基于jsp的网站开发开题报告青海公路工程建设市场信用信息服务网站
  • 做网站页面的软件wordpress如何开启page页面评论
  • 做网站最简单的长春财经学院
  • 导购网站 icp备案要求网站设置ico
  • ftp做网站营销策划方案步骤
  • 网站建设若干意见wordpress查看数据库密码
  • 什么网站可以做宣传西安网站建设聚星互联
  • 产品展示网站源码2015年做哪些网站致富
  • 潍坊网站制作推广怎样做彩票网站
  • 做视频网站被判刑自己怎么做企业网站建设
  • 安庆网站建设兼职哪个公司的卡网络最好
  • tp框架做响应式网站青岛网站建设首选
  • 外国自适应企业网站做网站模板用什么框架
  • win7做网站服务器隐私浏览器
  • 优秀的设计网站广州排名推广