[英]What is difference between QTimer timeout slot calling a slot through direct connection or queued connection?
我问的是在事件引擎中有很多qt事件排队的情况。 QTimer
是否通过事件发出timeout()
信号,并且将queuedConnection
与插槽一起创建另一个事件?
具有连接槽Qt::DirectConnection
将当被立即调用QTimer::timeout
信号被发射QTimer
。 如果使用排队连接,它将安排一个事件来调用插槽,该插槽将由事件循环处理。 QTimer
使用timerEvent
发出timeout
信号 。
不,默认情况下它不是排队连接,除非它在不同的线程中运行。 因此它是DirectConnection。
我想说,一般来说,如果你想保证事件的顺序顺序,你最好将Qt :: QueuedConnection与定时器之类的东西一起使用,即使在同一个线程中也是如此,以便事件进入队列并且不仅仅是行动在immidiatley上 - 因为这种行为是某种 - 更像是“中断”。
但是,如果你真的希望立即执行timer timeout(),那么使用Qt :: DirectConnection - 我觉得你需要更加小心这种连接类型(比如定时器可以在其他中间触发)普通代码)。
编辑
通过“普通代码”我的意思是......好吧,请看下面的评论:
当QTimer超时时,将每个QTimer的信号与插槽连接起来的每个Signal-Slot连接都会激发此插槽一次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.