• 6586阅读
  • 5回复

Signal是阻塞的吗? [复制链接]

上一主题 下一主题
离线huangliming
 
只看楼主 倒序阅读 楼主  发表于: 2008-07-14
— 本帖被 XChinux 执行加亮操作(2008-07-17) —
举个例子
                        connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(receiveData()));
                      有数据到就发出信号 调用receiveData()       
              那么如果当数据到时,上次调用的receiveData()还没有返回  信号会阻塞直到函数返回后才发出吗?
[ 此贴被huangliming在2008-07-14 13:35重新编辑 ]
离线gery_sunjian
只看该作者 1楼 发表于: 2008-07-15
不是赌赛的
离线orafy

只看该作者 2楼 发表于: 2008-07-15
是阻塞的呀
离线weizhy
只看该作者 3楼 发表于: 2008-07-17
根据assistant上的说明,
若信号和槽在同一个线程,默认为直接调用,因为信号发送和槽执行使用相同的事件循环,也就是所谓阻塞
若信号和槽在不同线程,则默认为排队调用,即向槽所在的线程的事件循环中插入一条调用事件,信号发送与槽执行没有关系

connect函数第五个参数指明了连接类型,默认为auto,实际上有Direct和Queued两种(另一种我没用过,不知道),auto实际做的事情就是:

If the signal is emitted from the thread in which the receiving object lives, the slot is invoked directly, as with Qt::DirectConnection; otherwise the signal is queued, as with Qt::QueuedConnection.
离线icelee
只看该作者 4楼 发表于: 2008-11-18
QT3里面只有四个参数(connect(。。。))
程序人生
离线vrcats
只看该作者 5楼 发表于: 2008-11-18
无论什么情况都会block
快速回复
限100 字节
 
上一个 下一个