• 信号槽机制的心得


    使用信号和槽机制,要注意以下问题:

    1、信号和槽的机制是非常有效的,但是它不像“真正的”回调那样快。信号和槽稍微有些慢,这是因为它们所提供的灵活性。但这种损失相对来说是比较小的。但要追求高效率的话,比如在实时系统中就要尽量少用这种机制。

    2、信号和槽机制与普通函数的调用一样,如果使用不当的话,在程序执行时有可能形成死循环,所以,在定义槽函数时一定要注意避免间接形成无限循环,即在槽中再次发射所接收到的同样的信号。

    3、如果一个信号和多个槽相关联的话,那当这个信号被发射时,与之相关联的槽的执行顺序将是髓机的,且顺序不能指定。

    4、宏定义不能用在signal和slot的参数中。

    5、构造函数不能用在signals和slots声明区域内。

    6、函数指针不能作为信号或槽的参数。

    7、信号和槽不能有缺省参数值。

    8、信号和槽不能携带模板类参数。

    9、嵌套的类不能位于信号和槽区域内,也不能有信号或者槽。

    10、友元声明不能位于信号和槽的声明区域内。

    参考:

    http://blog.csdn.net/hufengvip/article/details/6580553

    ---------------------------------------------------------------------

    通常使用的connect,实际上最后一个参数使用的是Qt::AutoConnection类型:
    Qt支持6种连接方式,其中3中最主要:
    Qt::DirectConnection(直连方式)
    当信号发出后,相应的槽函数将立即被调用。emit语句后的代码将在所有槽函数执行完毕后被执行。(信号与槽函数关系类似于函数调用,同步执行)
    Qt::QueuedConnection(排队方式)
    当信号发出后,排队到信号队列中,需等到接收对象所属线程的事件循环取得控制权时才取得该信号,调用相应的槽函数。emit语句后的代码将在发出信号后立即被执行,无需等待槽函数执行完毕。(此时信号被塞到信号队列里了,信号与槽函数关系类似于消息通信,异步执行)
    Qt::AutoConnection(自动方式)
    Qt的默认连接方式,如果信号的发出和接收这个信号的对象同属一个线程,那个工作方式与直连方式相同;否则工作方式与排队方式相同。
    参见文章:http://blog.csdn.net/qq419036154/article/details/6112503
    追问
    如果第五个参数没加的话,默认表示的是同步还是异步呢?
    回答
    没加的话与直连方式相同:当信号发出后,相应的槽函数将立即被调用。emit语句后的代码将在所有槽函数执行完毕后被执行。(信号与槽函数关系类似于函数调用,同步执行)
    个人觉得,在这个线程内是顺序执行、同步的,但是与其它线程之间肯定是异步的了。如果使用多线程,仍然需要手动同步。
    参考:
    http://zhidao.baidu.com/question/424073495.html
    -------------------------------------------------------------

    Qt中线程跟信号槽的关系
    http://wan-2004.iteye.com/blog/1169265

  • 相关阅读:
    JAVA的向上转型 和 向下转型
    Mobx 常用函数整理
    HTTP错误代码对应
    D3官网上的力导图
    用D3画简单的力导图
    nodejs 爬图片
    nodejs 爬热搜
    canvas 图片旋转 导出下载
    canvas 电子签名
    canvas 音乐跳动效果
  • 原文地址:https://www.cnblogs.com/findumars/p/3993900.html
Copyright © 2020-2023  润新知