问题标签 [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 回答
229 浏览

c++ - 使用协程提升 MSM + ASIO。一个简单的测试用例不起作用

我正在尝试构建一个结合文档中两个 boost 示例的小示例。第一个是来自 MSM(状态机)库的示例:https ://www.boost.org/doc/libs/1_75_0/libs/msm/doc/HTML/examples/AnonymousTutorialWithFunctors.cpp 第二个是回声来自 Asio 的服务器(带有协程)示例:https ://www.boost.org/doc/libs/1_75_0/doc/html/boost_asio/example/cpp17/coroutines_ts/refactored_echo_server.cpp echo 服务器示例在我的机器上正确运行。

状态机有 2 个状态,AsioInitState并且RegisterServersState在转换表上只有一个匿名转换。

按照我的源代码:EchoServerMSM.h

主文件

我得到的控制台输出是:

  • 为什么listener - 1永远不会在控制台上打印?
  • 如果队列上应该有其他协程,io_context 如何结束其运行?
  • 什么this_coro::executor代表听者?切换它会是一样的*(fsm.io_context)吗?
  • 是否需要任何其他步骤才能使其作为回声服务器示例工作?

编辑:一个cmake来编译它(win或mac):

0 投票
1 回答
137 浏览

c++ - 在子机上使用构造函数参数提升 MSM

我正在尝试SyncBox在主状态机和子状态机之间共享对象。理想的方法是将它传递给构造函数(在更复杂的情况下,子状态机将是区域之一的初始状态)。无论如何,我无法使这段代码正确编译和执行。有什么帮助吗?

0 投票
0 回答
49 浏览

c++ - 从 submachine 在outerSM 的正交区域上提升 MSM 调用 .process_event

我在 boost::msm 中实现了描述的状态机作为最小示例。代码可在此处查看:https ://wandbox.org/permlink/tIhZao8YGhJvPMfF

UML 状态机图

如下代码所示,我想从“someAction”调用 event2,当从顶级状态机“MainMachine”对 event4 调用 someAction 时,它可以正常工作。但是,当从 Submachine 内部调用 event3 时,只会触发 submachine 的无转换响应(或者如果 submachine 中没有提供转换响应,则运行时断言失败。我本来希望 event2 被引用到顶级状态机的转换表,但这似乎不起作用,因为 someAction 只获得对 SubMachine FSM 的引用。

在从 Submachine 调用的动作内部的顶级状态机的正交区域中触发事件的最佳方法是什么?

输出:

0 投票
1 回答
98 浏览

c++ - boost::mp11::mp_list 无法基于 boost::msm 为 FSM 定义正确的转换表,缺少什么?

在用?构造的状态机中,是否boost::mp11::mp_list可以用作转换列表boost::mpl::vectorboost::msm

我刚刚尝试过(链接),似乎:

  1. 它编译
  2. 但它不起作用 - 缺少转换表
  3. 并产生与 相比 1/3 的代码boost::mpl::vector

我也试过boost::fusion::vector了,它有效。

我做了什么:

我简化了这个例子boost::msm————只是为了有 2 个状态和 2 个转换。

我将所有替换mpl::vectorTypeList定义为:

状态机如下:

对于这个简单的场景:

基于boost::mpl::vector(and boost::fusion::vectorand boost::mpl::list) 的示例按预期生成输出:

在使用boost::mp11::mp_list输出时:

您是否知道缺少什么boost::mp11或目前无法boost::mp11::mp_list用作boost::msm状态的转换表?

0 投票
1 回答
47 浏览

c++ - boost msm cannot processing polymorphic event?

I am using boost:msm to create a state machine. It seems when processing events, the state machine does not care about polymorphism.

Say I have multiple events all derived from a base event:

Then if I have a bunch of events stored in a vector via pointers of base event type:

When I process these events by the state machine:

The boost::msm state machine thinks it receives EvtBase, rather than the actual event pointed by the pointer.

Am I doing something wrong, or is there a way to change this behavior and make process_event respect polymorphism?

0 投票
1 回答
19 浏览

boost - 提高 stop() 的 msm 使用率

我注意到使用 boost::msm 时,停止函数的行为与我预期的不同。可以说我愿意

我希望在停止之后不再处理任何事件。但是这里的输出是

完整的例子在这里https://godbolt.org/z/o88ze6641

如果stop()不阻止状态机接受进一步的事件,它的用途是什么?我知道它会触发当前状态的 on_exit,但是离开后重新进入状态对我来说似乎很奇怪。