問題タブ [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 に答える
801 参照

c++ - Boost MSM でコンパイル時間を短縮する方法

約 40 の遷移 (4 つのサブステート マシンを含む) を持つルート ステート マシンがあります。すべてうまくいきましたが、トランジションの数を増やし始めると、コンパイル時間が大幅に増加します (大規模なステートマシンの開発は地獄になります)。boost::msm::back::favor_compile_time ポリシーを使用して、サブマシンを複数の翻訳単位に分割しようとしましたが、効果がありません。この問題に関する回避策はありますか?ブースト - 1.53、コンパイラ - MSVC 2012、プロセッサ - Intel i7


Upd: 時間を短縮する最善の方法 - プロジェクトからブースト msm を削除します

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

c++ - Boost::MSM: Transition Priority

I try to use boost::MSM to implement a simple state machine for testing purpose. There are several events which have to be processed in the right order, so i defer the other events, which are currently not allowed. I try to defer the events in the transition table, to have one place to look for it, despite having all states to look, what events they defer.

I tried to change the transition rows to change their priorities, but it didnt help. If i unkomment the anonymous transition from live_got_image to live_wait_for_image, it works as expected, but i want to transition automaticly to repeatedly enter the states live_wait_for_image/live_got_image until the ev_stop_live get sent.

I expect the following output:

but actually i get the following output:

I use boost 1.57.0 and MSVC-2013 (VS-12).

Could anybody get me a useful hint?

Georg

Here is the code:

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

c++ - boost:msm にデフォルト コンストラクターがないステート マシン

boost::msm のドキュメントには、デフォルト コンストラクターのないステート マシンの例があります。スーパー SM からサブ SM に直接ジャンプする場所で動作させることができます。しかし、あるサブ SM から別のサブ SM にジャンプすると、ターゲット SM がデフォルトで構築され、データが失われます。以下は例です。サブ状態のデフォルトのコンストラクターを提供しないとコンパイルできません。これを機能させるには、サブ SM に追加情報を提供する必要がありますか?

例を実行すると、次のようになります。

0xdeadbeef は他のものと同じアドレスだと思っていました。

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

c++ - boost::msm でのサブ SM 間のジャンプ

メイン SM 内に 2 つのサブ SM があります。メイン SM からどちらか一方にジャンプできるようにしたいのですが、一方のサブ SM から他方の SM にもジャンプできるようにしたいです。しかし、私はできません。メイン SM からサブ SM にジャンプしたり、サブ SM の 1 つから別のサブ SM にジャンプしたりできますが、サブ SM 間に「相互」トランジションを追加すると、コンパイルが失敗し、さまざまなことについて文句を言う ~10 エラーが発生します。これは、コンパイラが再帰的なスピンに入るためだと思います。

メイン SM にダミー状態を追加し、ターゲット サブ SM への匿名遷移を追加できると思います。しかし、その後、移行をトリガーした実際のイベントを失うことになり、それは望ましくありません (データが含まれています)。

問題のある行をコメントアウトしたテストコードを次に示します

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

boost - 現在のブースト メタ ステート マシン (MSM) サブステートにデータを渡す方法

次の例では、現在の実行がまだ substate1 にある間に、substate1 に継続的にデータを渡し、そのデータに基づいて Event3 または Event1 を送信します。MSM は (process_event()) を使用したイベントの送信のみをサポートしているようですが、現在の状態にデータを継続的に送信する方法がわかりません。

出力:

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

c++ - ブースト msm サブサブステートマシン

boost::msm を使用してサブサブステートマシンを実装する際に問題があります。ここでコードを最小限に抑えようとしています...

Test.cpp:

StateMachineA は StateMachineA.h で定義されています

StateMachineB には、まったく同じコードを使用して StateMachineC が含まれています (B を C に置き換えます...)。

StateMachineC を StateMachineA のサブマシンとして配置すると (StateMachineB を省略すると)、正常に動作します。C を含めずに A -> B についても同じように動作します。ステート マシンの順序を変更すると (A -> C -> B)、同じエラーが発生します。要約すると、2 つのステート マシンのすべての組み合わせが機能しており、3 つのステート マシンのすべての組み合わせが失敗しています。SM sm1;メイン関数にあるときにエラーが発生します。-> テンプレートの解決中ですか? その行がなければ、すべてが正常にコンパイルされます。

エラー ログは長いです (ホバリングすると Visual Studio がクラッシュするのに十分な長さです...)。最初のエラーは次のとおりです。

with ... そして約 200 の "with" 行が続きます。その後、次のような多くのエラーが発生します。

従う。

何か案は?

ありがとう!