複数の遅延イベントはどのようにブーストステートチャートで動作しますか?ブーストステートチャートの複数の遅延イベント
私は4つの州と3つのイベントがあるとしましょう。非遅延遷移次のように見える:
S1 - (E1) - > S2 - (E2) - > S3 - (E3) - > S4
状態機械はで開始S1。イベントは、E2、E3、E1の順に転記されます。
ステートマシンがこの一連のイベントの結果としてS4に到達するようにします。これを達成するために私は何をしなければなりませんか?
- 明らかに、S1でE2とE3を延期する必要があります。
- S2でE3を延期する必要がありますか?私はそれ以外の場合は、S2に達すると破棄されると思います。
私は、ドキュメントのこの部分を想定していますhttp://www.boost.org/doc/libs/1_55_0/libs/statechart/doc/reference.html#process_eventは答えが含まれていますが、それは非常に技術的である(意味論のより実装のではなく説明 - チュートリアルでは、どちらか明確ではない)、および参照の多くが含まれています、確かに知るのは難しいです。
感謝を使用するためのヘッダファイル { のtypedef MPL ::リスト< SC ::推移、 SC ::延期反応; }; ? –
#include <boost/statechart/deferral.hpp>
を追加する必要があります。 だから私は 構造体S2と同様に、S2で再びE3を延期する必要はありません:SC :: simple_state@Jens Muller:いいえ、いったん延期されると、イベントは外部キューに残り、新しい状態遷移が発生するたびに実行されます。後続のイベントハンドラのいずれかで処理されるまで待ち行列に残ります –
@DKGイベントの順序をE1、E3、E2とします。それから、E3イベントを受け取ったらS2に入ります。それは延期ですか?そうでない場合は、E3もS2で延期できますか? –