迟延的事件-《中国2060年前碳中和研究报告》

时间:2024-06-28 01:03:10
【文件属性】:

文件名称:迟延的事件-《中国2060年前碳中和研究报告》

文件大小:4.49MB

文件格式:PDF

更新时间:2024-06-28 01:03:10

UML 状态图 实用C设计 实用C++设计 中文全文

5.3 迟延的事件 5.3.1 目的 通过改变事件的顺序来简化状态机。 5.3.2 问题 设计交互式系统的最大的挑战之一是这样一个系统必须在任何时刻处理每一个事件。然而,有时候一个 事件在某个不方便的时刻到达,这时刻系统正在某个复杂的事件队列的中间。很多情况下,事件的性质 是可以(在限度内)被推迟的,直到系统完成了当前序列的处理,这时候这个事件可以被召回并方便的 处理。 考虑这个例子,服务器程序处理业务(如从 ATM 终端27 )的案例。一旦业务开始了,它典型 地要走完一个处理序列,从一个远距离终端接受数据开始,然后是业务的授权。不幸的是,对这个服务 器的新业务请求会随机的到达,这样当服务器还在忙于处理前一个业务时它会得到一个请求。一个选项 是忽略这个请求,但是这也许是不可接受的。另一个选项是立刻开始处理新的业务,这会把事情搞的非 常复杂,因为多个未解决的业务将需要被同时处理。 5.3.3 解决方法 解决方法是延迟新的请求并在一个更加方便的时候处理它,这实际上会导致改变了提交给状态机的事件 的顺序。 UML 状态图通过允许每一个状态规定一个延迟事件的列表而直接支持这样的机制(见第二章 2.3.11 节)。当一个事件在当期活动状态配置的结合的延迟清单里时,它没有被提交给状态机而是为以 后的处理而被排队。在一个状态转换时,不再被延迟的事件被自动的召回并派发给状态机。 图 5.5 展示了一个基于这个机制的解决方法。业务服务器状态机开始于 idle 状态。 NEW_REQUEST 事件造成了一个到 busy状态的子状态的转换。 busy状态言辞了 NEW_REQUEST 事 件(注意在 busy状态的内部转换 compartment的特别的 deferred 关键词)。在服务器还在某个 busy子 状态时到达的任何 NEW_REQUEST被自动的延迟。当 AUTHORIZED转换到 idle 状态时, NEW_REQUEST被自动的召回。这个请求然后和任何其他事件一样在 idle 状态被处理。 26 例如,基于状态的例外处理过程(见第六章 6.7.4节)通常需要立刻处理例外情况,因此你不想让其他事件超过 EXCEPTION 事件。 27 ATM 代表 automated teller machine,也就是柜员机。 保留中文简体翻译的全部版权 anymcu@gmail.com 2010 166


网友评论