当前位置: 首页 > 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://wiki.neutronadmin.com/news/6264/

相关文章:

  • 个人网站制作在线宁波网页制作设计营销
  • 网站开发与电子商务抖音关键词优化
  • 电子商务网站建设客户需求调查表权威发布新冠疫苗接种禁忌
  • 南京网站制作公司有哪些公司黄页查询
  • 做文字的网站网站建设公司有前途吗
  • wordpress 多站点教程米拓网站建设教程
  • 如何做公司自己的网站土巴兔网站开发技术
  • 网站设计项目建设内容网站建设制作包括哪些方面
  • 企业网站模板 html株洲网站开发公司
  • 专门做软陶的网站厦门一个平台做网站啥的
  • 深圳福田网站设计wordpress怎么设置伪静态页面
  • 网站开发在哪里接活网站后台内容编辑器
  • 国外皇色网站专业网站建设专家
  • 我要自学网网站开发免费软件下载网站排行
  • 校园网站模版十大软件app排行榜下载
  • 电商网站的数据库设计开发板是什么
  • 云南网站备案难吗下什么软件做网站
  • 模板网站哪家好中国建设银行南京分行网站首页
  • 不懂网站怎么做平台西安微信网站制作
  • 网站设计项目总结合肥做网站加盟
  • 30天网站建设实录我市建设车辆违章查询网站 病句
  • 外贸平台自建站标智客logo设计免费生成
  • 佛山网站建设公司有哪些兼职做设计的网站
  • 怎么编辑网站源代码如何登录qq网页版
  • 网站建设策划包括哪些内容seo在线诊断工具
  • 企业英文网站建设宿州专业网站建设公司
  • 电子商务网站建设试题3鞍山招聘网最新招聘
  • 漂亮的蓝色网站网上做兼职网站有哪些工作
  • 加强医院网站建设图派科技做网站怎么样
  • 竹子建站教程手工活外包加工网