|
40Qter豆
本帖最后由 another_qt 于 2017-9-13 18:30 编辑
各位大侠,想请问下,在GUI线程里使用定时器QTimer时;其connect方式不同如下:
connect( timer, SIGNAL(timeout()), this, SLOT(updateUI()) ,Qt::QueuedConnection);
和 connect( timer, SIGNAL(timeout()), this, SLOT(updateUI()), Qt::DirectConnection);
这两者的区别是什么?
我的理解是,
第一种方式,当超时信号到达时,updateUI 会被放入gui线程的事件循环里,等程序返回事件循环时才真正去执行updateUI ;
第二种方式,当超时信号到达时,updateUI 会直接被调用;
不知道这样的理解是否有误?请大家指正
如果是这样理解的话,那是不是跟使用 QBasicTimer 里然后重载 QObject::timerEvent() 差不多了?只是可能 QBasicTimer 的效率会更高些。
|
最佳答案
查看完整内容
你可以试一试啊,其实实际效果是这样的:
就是排队执行,,比如说,当前程序在执行一个方法,这个方法还没执行完,信号就来到了,这个时候有个问题:是执行完当前的方法再去执行该信号对应的槽函数呢?还是立马去执行槽函数呢?
1.Queued 是 “执行完当前的方法再去执行该信号对应的槽函数”
2.Direct 是 “立马去执行槽函数” 等到槽函数执行完了,再去执行那个“未执行完的方法”。。。
这样解释清楚吗? ...
|