[英]How are managed the events in QStateMachine?
我使用基于QScxmlStateMachine
的状态机。 有些转换是由onEntry处理程序中的代码自动触发的,而另一些则是由外部事件(例如用户单击)触发的。
状态机的执行是异步的。 这段代码没有阻塞:
m_statemachine->submitEvent("user_initialize", settings);
精细。 我想知道的是状态机内部的处理是如何完成的。
第一个事件已排队,并且将异步进入初始化状态,那么在onEntry代码的此状态下可能触发的事件又如何呢?
内部事件循环是否可以在处理下一个转换之前处理其他一些GUI事件?
而且,我认为不是,状态机事件循环是否在单独的线程中?
第一个事件已排队,并且将异步进入初始化状态,那么在onEntry代码的此状态下可能触发的事件又如何呢?
所有事件都已排队。 这些事件的Qt术语是发布事件(与立即执行的已发送事件相反)。
而且,我认为不是,状态机事件循环是否在单独的线程中?
“内部”事件循环有点用词不当。 状态机确实在当前线程的事件循环上运行,但是它会复制一些事件并在以后处理它们。
内部事件循环是否可以在处理下一个转换之前处理其他一些GUI事件?
是。 您只能保证状态机本身中的相对事件处理顺序。 在传递给状态机的每个事件之间可以处理任何数量的事件。 无论您正在执行哪种事件处理,总是如此。 规避此问题的唯一方法是发布更高优先级的事件。 多个事件优先级有其自身的缺点,必须谨慎使用,并了解事件队列中如何实现优先级方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.