我问的是在事件引擎中有很多 qt 事件排队的情况。是否通过事件QTimer
发出timeout()
信号并将与queuedConnection
插槽创建另一个事件?
问问题
1989 次
3 回答
3
当信号由 发出时,与 连接的插槽Qt::DirectConnection
将立即被调用。如果使用排队连接,它会安排一个事件来调用该槽,该槽将由事件循环处理。用于发出信号。_QTimer::timeout
QTimer
QTimer
timerEvent
timeout
于 2016-06-16T07:15:04.473 回答
1
不,默认情况下它不是排队连接,除非它在不同的线程中运行。因此它是 DirectConnection。
我想说,一般来说,如果你想保证事件的顺序,你最好将 Qt::QueuedConnection 与定时器之类的东西一起使用,即使在同一个线程中,这样事件就会进入队列而不只是被执行在immidiatley上-因为这种行为更像是“中断”。
但是,如果您真的希望立即执行计时器 timeout() 则使用 Qt::DirectConnection - 我觉得您通常需要更加小心这种连接类型(使用可以在其他中间触发的计时器之类的东西正常代码)。
编辑
“普通代码”是指......好吧,请参阅下面的评论:
于 2016-06-16T07:16:38.470 回答
0
当一个 QTimer 超时时,每个将这个 QTimer 的信号与一个槽连接的 Signal-Slot 连接都会触发这个槽一次。
于 2016-06-16T06:37:47.197 回答