繁体   English   中英

如何在QStateMachine中管理事件?

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

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