繁体   English   中英

通过直接连接或排队连接调用插槽的QTimer超时插槽有什么区别?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM