问题标签 [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.
c++ - Boost MSM 仅处理内部转换
我正在使用新的 Boost 1.44.0 MSM 库来生成状态机。在这个状态机中有两类事件class1
和class2
。class1
事件可以由状态处理,或者事件S1
只能由状态处理。S2
class2
S2
一个特殊class1
事件upgrade_req
要求从一个州升级S1
到另一个州S2
。
我在 Boost::MSM 中实现了如下:
我的问题是,当我按原样使用它时,该upgrade_req
事件永远不会被 main 处理MyFSM::transition_table
。它仅由S1::internal_transition_table
.
例如:
我希望这个输出是:
处理状态 1 中的事件。
升级请求正常。
处理状态 2 中的事件。
但是,我得到的是:
处理状态 1
中的事件。处理状态 1 中的事件。
错误。在状态 1 中接收到 2 类事件。
有人对我如何解决此问题有建议吗?
谢谢,保罗
c++ - Boost Statechart vs. 元状态机
显然 boost 包含两个独立的状态机库:Statechart和Meta State Machine (MSM)。标语给出了非常相似的描述:
- Boost.Statechart - 任意复杂的有限状态机可以用易于阅读和维护的 C++ 代码实现。
- Meta State Machine - 一个非常高性能的库,用于表达 UML2 有限状态机。
您知道在两者之间进行选择的主要区别是什么吗?
c++ - 如何在 on_entry 中使用 Boost.MSM is_flag_active?
我想在我的状态的 on_entry 模板函数之一中使用 is_flag_active() 函数:
但是我得到了以下编译错误:
但是在状态机之外,我的意思是如果我首先声明一个状态机,我可以使用 is_flag_active:
如果我使用前端的 is_flag_,我会再次遇到编译器错误(msm::back::state_machine 中没有这样的函数)。
知道如何将 is_flag_active 与 on_entry 一起使用吗?或者,如果不可能,还有其他选择吗?
感谢您的帮助,加博尔
c++ - Boost 状态机延迟事件
如果第二个转换连续两次延迟,是否可以丢弃第一个?
c++ - 如何访问(增强元)状态机中的所有状态?
有没有办法访问 boost msm 中的所有状态(不仅是活动状态)?例如,放置在状态中的所有 UI 控件都应在调整大小事件上调整大小,而不管它们的状态是否处于活动状态。
更新:让我澄清一下,我需要某种迭代器来遍历我的状态机创建的所有对象状态。
更新#2:下面是一个例子。我需要调用所有状态的resize方法。
c++ - 提升 MSM - 更清晰
我想使用 boost msm 状态机,但我很难想象它是如何工作的。假设我们只有 2 个状态(s1,s2),要从 s1 转到 s2,您需要触发事件 e1,而要返回则需要另一个 e2。e1 和 e2 只能分别从 s1 和 s2 内触发。
现在在 main() 中,我首先启动状态机 (start()),然后会有一个 while 循环,每 1 分钟将返回到状态机,但必须从它离开的地方继续。
所以基本上当一个状态完成执行时,状态机将退出,然后会有 1 分钟的延迟,然后 while 循环需要将我带回到我退出之前的状态,或者我认为这就是我们应该如何实现状态机。
我的要求是不是很不寻常?如果是,那么人们如何实现非阻塞状态机?如果没有,那么我该如何实现 Go_backtoStatemachine()?
c++ - Boost MSM 库给出错误
下面的代码是 boost msm 文档中针对仿函数前端给出的示例。
当我试图构建它时,它给我的错误不是在这个文件中,而是在 boost 库文件 proto 中。以下是我得到的错误
我在这里想念什么?
c++ - boost msm,我如何确定是否发生了转换?
当我触发 process_event("eventname") 时,如何检查是否发生了状态转换或是否调用了 no_transition?
基本上,我希望触发/调用 process_event("eventname") 的类能够判断转换是否发生。目前我无法确定这一点。
有任何想法吗?
谢谢
c++ - 使用事件和状态重用来提升 msm 问题
我的转换表和事件有问题。让我解释一下说明问题的假设计:
我有一个包含 2 个状态(s0 和 s1)和 1 个子状态机(subm1)的状态机(myStateMachine)。
子状态机 subm1 包含初始状态“sub0”和 s1(与 myStateMachine 中的状态相同)。
这是主要的转换表:
事件 'ES1' 上的 s0->s1
事件 'ES2' 上的 s0->s2
事件 'ESUB' 上的 s0->subm1
这是submachine转换表:
事件“ES1”上的 sub0->s1
现在,假设状态 s1 正在使用触发它的事件来提取一些信息,即
所以每个可以转换到 s1 的事件都需要实现 getEventData() 方法。
-> 这是正常的!
现在我的问题是 ESUB 没有实现 getEventData() 但显然它应该(编译器给出错误)。我不明白为什么。
我没有使用 ESUB 转换到 s1,但我正在使用 ESUB 转换到 subm1,并且 subm1 包含 s1,但那时我没有访问它。
我希望这很清楚。