是状态机中的阻塞系统调用呼叫事件

是状态机中的阻塞系统调用呼叫事件

问题描述:

在UML状态机中状态之间的转换中,您可以具有触发器,警戒和效果。是状态机中的阻塞系统调用呼叫事件

如果我进行阻塞系统调用(例如,在Posix系统上选择()或在Raspberry Pi上执行wait_for_edge()),这是一个呼叫事件,因为状态机被阻塞,我无法继续进行此操作?

我可以用这种方式建模这个状态机吗还是必须使用不同的机制?

感谢

如果你有一个阻塞调用,状态保持它在哪里。您将在一个州内显示如<<do>>这样的呼叫。

enter image description here

状态机内部的阻塞调用违反状态机内的事件处理的普遍假定运行到完成语义。这是因为非阻塞(从阻塞调用返回)是将事件传递给状态机的另一种方式。问题在于,当状态机已处于处理原始事件的中间时,此“后门”事件到达。另外,在状态机图中没有明确的方式显示这种“非阻塞”事件。由于这些原因,应该在状态机内部或者在任何真正的事件驱动系统内部避免任何阻塞调用(即使是在线延迟())。事件应严格通过事件循环传递。这种事件循环可以阻止等待事件,但这是以外的任何状态机的