zoukankan      html  css  js  c++  java
  • QT下的QThread学习(一)

      参考文档如下:

      http://blog.csdn.net/styyzxjq2009/article/details/8204506

      上面这篇文章的开头也也出了另外两篇文章,一并看看,可以看到他的解决思路。在网上搜索QThread使用方法,就会看到QThread不好使用。看了几篇文章,把其中一些以前没有注意到的知识点记录一下。

      1、QObject::Connect函数 最后一个参数的设置。http://mobile.51cto.com/symbian-268690.htm 这篇文章有解释。

      a、自动连接(Auto Connection)  这是默认设置

      如果发送者和接收者处于同一线程,则等同于直接连接

      如果发送者和接受者位于不同线程,则等同于队列连接

      也就是这说,只存在下面两种情况

      b、直接连接(Direct Connection)

      当信号发射时,槽函数将直接被调用。Qt::DirectConnection表示一旦信号产生,立即执行槽函数

      无论槽函数所属对象在哪个线程,槽函数都在发射者所在线程执行。   注意"槽函数都在发射者所在的线程执行"。

      c、队列连接(Queued Connection) Qt::QueuedConnection表示信号产生后,将发送Event给你的receiver所在的线程,postEvent(QEvent::MetaCall,...),

      当控制权回到接受者所在线程的事件循环式,槽函数被调用。            注意“槽函数在接收者所在线程执行”。

      槽函数在接收者所在线程执行。

      d Qt::BlockingQueuedConnection表示信号产生后调用sendEvent(QEvent::MetaCall,...)  在receiver所在的线程处理完成后才会返回;只能当sender,receiver不在同一线程时才可以。

      上面的d的意思与应用在与,比如槽是接收一个socket上的数据,那么当有一个数据流到来时,底层发一个信号,这个时候,你在槽函数中去处理这些数据,而处理这些数据比较耗时,比如写入文件,在写文件过程中,又有数据到来,那么这个槽函数又会被调用。这样问题就来了。

      这与VC运行机制中的SendMessage与PostMessage消息处理机制一样,SendMessage必须等到消息响应完成才处理向下执行,而PostMessage则是立即返回。

  • 相关阅读:
    LCA+线段树/树状数组 POJ2763 Housewife Wind
    图论 洛谷P2052 道路修建
    动态规划 洛谷P2365 任务安排
    GCD问题 洛谷P1372 又是毕业季I & P1414 又是毕业季II
    动态规划 洛谷P1140 相似基因
    动态规划 洛谷P1868 饥饿的奶牛
    动态规划 P1280 尼克的任务
    倍增LCA BZOJ1776 cowpol奶牛政坛
    P1416 攻击火星
    搜索 洛谷 P1434滑雪
  • 原文地址:https://www.cnblogs.com/kanite/p/5159521.html
Copyright © 2011-2022 走看看