問題タブ [boost-msm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2115 参照

c++ - 内部トランジションのみを処理するブースト MSM

新しい Boost 1.44.0 MSM ライブラリを使用してステート マシンを作成しています。このステート マシンには、 と の 2 つのクラスのイベントがclass1ありclass2ます。class1イベントは状態によって処理されるかS1S2イベントclass2は状態によってのみ処理されますS2

特別なclass1イベントにより、状態から状態へupgrade_reqのアップグレードが要求されます。S1S2

Boost::MSM で次のように実装しました。

私の問題は、これをそのまま使用すると、upgrade_reqイベントが main によって処理されないことですMyFSM::transition_table。によってのみ処理されますS1::internal_transition_table

例えば:

これの出力を次のようにしたいと思います。

状態 1 の処理イベント。
アップグレード要求 OK。
状態 2 の処理イベント。

しかし、私が得るのはこれです:

状態 1 の
イベントを処理しています。状態 1 のイベントを処理しています。
エラー。状態 1 でクラス 2 イベントを受け取りました。

この問題を解決する方法について誰か提案がありますか?

ありがとう、ポールH

0 投票する
5 に答える
34489 参照

c++ - ブースト ステートチャートとメタ ステート マシン

ブーストには、ステート マシン用の 2 つの個別のライブラリが含まれているようです。StatechartMeta State Machine (MSM) です。キャッチフレーズは、非常によく似た説明を提供します。

  • Boost.Statechart - 任意の複雑な有限状態マシンを、読みやすく保守しやすい C++ コードで実装できます。
  • Meta State Machine - 表現力豊かな UML2 有限状態マシン用の非常に高性能なライブラリ.

主な違いは何か、また、この 2 つを選択する際の考慮事項は何ですか?

0 投票する
1 に答える
694 参照

c++ - on_entry内でBoost.MSMis_flag_activeを使用する方法は?

州のon_entryテンプレート関数の1つでis_flag_active()関数を使用したいと思います。

ただし、次のコンパイルエラーが発生しました。

ただし、ステートマシンの外部では、最初にステートマシンを宣言する場合、is_flag_activeを使用できます。

front_endのis_flag_を使用すると、コンパイラエラーが再び発生します(msm :: back :: state_machineにはそのような関数はありません)。

is_flag_activeをon_entryと一緒に使用する方法はありますか?または、それが不可能な場合、代替手段はありますか?

助けてくれてありがとう、Gabor

0 投票する
0 に答える
193 参照

c++ - ステート マシンのラジオ ボタン

ブースト メタ ステート マシンにラジオ ボタンを実装するにはどうすればよいですか?
問題は、トランジションの量が 2 次的に増加することです。たとえば、3 つのボタンの場合、オプションは次のようになります。

ただし、4 つのボタンの場合、オプションは次のとおりです。

のようなことをする方法はありますか

ブーストメタステートマシンで?

0 投票する
0 に答える
540 参照

c++ - ブーストステートマシンの延期イベント

2番目の遷移が2回続けて延期された場合、最初の遷移を破棄することは可能ですか?

0 投票する
2 に答える
2316 参照

c++ - (ブースト メタ) ステート マシンのすべての状態にアクセスするにはどうすればよいですか?

ブースト msm ですべての状態 (アクティブな状態だけでなく) にアクセスする方法はありますか? たとえば、状態に配置されたすべての UI コントロールは、状態がアクティブかどうかに関係なく、サイズ変更イベントでサイズ変更する必要があります。

更新: 少し明確にさせてください。ステート マシンによって作成されたすべてのオブジェクト状態を介して、ある種のイテレータが必要です。

更新 #2: 以下は例です。すべての状態のサイズ変更メソッドを呼び出す必要があります。

0 投票する
2 に答える
5688 参照

c++ - ブーストMSM-より明確

Boost msmステートマシンを使用したいのですが、それがどのように機能するか想像するのに苦労しています。状態が2つ(s1、s2)しかない場合、s1からs2に移動するには、イベントe1を起動する必要があり、元に戻すには、別のe2が必要です。e1とe2は、それぞれs1とs2内からのみ起動できます。

ここでmain()で、ステートマシン(start())を起動することから始めます。その後、1分ごとにステートマシンに戻るが、離れた場所からピックアップする必要があるwhileループがあります。

したがって、基本的に状態の実行が終了すると、ステートマシンが終了し、1分の遅延が発生します。その後、whileループを使用して、終了前の状態に戻す必要があります。これを実装する方法だと思います。ステートマシン。

私が求めているのは異常なことですか?はいの場合、人々はどのように非ブロッキングステートマシンを実装しますか?いいえの場合、Go_backtoStatemachine()を実装するにはどうすればよいですか?

0 投票する
1 に答える
758 参照

c++ - Boost MSM ライブラリでエラーが発生する

以下のコードは、ファンクタ フロント エンドのブースト msm ドキュメントに記載されている例です。

これをビルドしようとすると、このファイルではなくブーストライブラリファイルのプロトでエラーが発生します。以下は私が得るエラーです

ここで何が欠けていますか?

0 投票する
1 に答える
551 参照

c++ - ブースト msm、遷移が発生したかどうかを判断するにはどうすればよいですか?

process_event("eventname") を起動したときに、状態遷移が発生したかどうか、または no_transition が呼び出されたかどうかを確認するにはどうすればよいですか?

基本的に、process_event("eventname") を起動/呼び出すクラスが遷移が発生したかどうかを判断できるようにしたいと考えています。現在、私はこれを決定することはできません。

何か案は?

ありがとうございました

0 投票する
1 に答える
1169 参照

c++ - イベントと状態の再利用で msm の問題を促進

遷移テーブルとイベントに問題があります。問題を説明する偽のデザインを説明しましょう。

2 つのステート (s0 と s1) と 1 つのサブステートマシン (subm1) を含むステート マシン (myStateMachine) があります。

substatemachine subm1 には、初期状態 'sub0' と s1 (myStateMachine と同じ状態) が含まれています。

これは主な遷移表です:

イベント 'ES1' の s0->s1

イベント「ES2」での s0->s2

イベント「ESUB」の s0->subm1

これはサブマシン遷移表です:

イベント 'ES1' の sub0->s1

ここで、状態 s1 が、それをトリガーしたイベントを使用して何らかの情報を抽出していると仮定します。

したがって、s1 に遷移する可能性のあるすべてのイベントは、getEventData() メソッドを実装する必要があります。

→これが当たり前!

今私の問題は、ESUB が getEventData() を実装していないことですが、明らかにそうすべきです (コンパイラがエラーを出します)。理由がわかりません。

ESUB を使用して s1 に移行していませんが、ESUB を使用して subm1 に移行しており、subm1 には s1 が含まれていますが、その時点ではアクセスしていません。

これが明確であることを願っています。