18
如果我有一类A,其中其功能之一的作用:Qt:事件是否按顺序处理?
void A::func()
{
emit first_signal();
emit second_signal();
}
假设B类有2个插槽,一个连接到first_signal
,另一个到second_signal
,是它保证,所述插槽连接到first_signal
将始终处理之前插槽second_signal
?
我认为,只要它们具有相同的类型,即使它不是默认值,也会得到保证。排队的人会创建两个事件,每个事件具有相同的优先级,然后按顺序处理这些事件。此外,默认的连接类型是Qt :: AutoConnection,只要发射器和接收器都在同一个线程中,就可以解析为直接连接。 – 2009-11-14 14:03:49
你的帖子的开始句应该是'如果你在信号和插槽之间使用DIRECT连接类型;因为默认类型是'Qt :: AutoConnection',它的行为有所不同,取决于发送代码和接收对象是否存在于不同的线程中。参见['Qt :: ConnectionType'文档](http://qt-project.org/doc/qt-4.8/qt.html#ConnectionType-enum)和[Threads,Events and QObjects](http:// qt- project.org/wiki/Threads_Events_QObjects)。 – Hossein 2013-05-10 07:01:17
如果您选择Qt :: QueuedConnection(或Qt :: AutoConnection,并且该插槽与信号处于不同的线程中),当然该插槽将被异步调用,但我认为问题依然存在:“是否保证插槽连接到first_signal的数据将始终在second_signal插槽之前处理?“任何人都有答案? – 2016-01-15 10:45:23