问题标签 [boost-statechart]
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::statechart 和非常量事件
有没有办法定义boost::statechart::in_state_reactions
允许将非常量事件传递给反应函数?
c++ - 我可以使用 boost.statecharts 自定义对不同正交区域中多个状态的事件做出反应吗?
我的用例类似于这个 SSCCE。问题是,如果没有发生转换,我需要转发似乎不自然的事件,以便它们由其他正交区域处理。更重要的是,尽管在我需要过渡的情况下,我无法找到一种方法来让该事件在其他地区得到反应。我应该如何重组来解决这个问题?
如果这很重要,我正在使用 boost 1.53。
c++ - 使用 boost::bind 调用 boost::Statechart 中的函数
我正在尝试编写一个程序来将文件上传到 arduino。该程序可以打开一个串行端口并从 arduino 接收数据。当我尝试对处于状态图状态的函数使用回调时,问题就出现了,程序崩溃了。
我以前从未使用过 boost,并决定这是一个尝试的好机会。
我有一个带有基本转换的状态图对象:空闲;-> 开港;-> 端口开放;-> 等待曲线选择确认;-> 选择文件;-> 等待文件接收;-> 比较文件;-> 关闭程序;
还有一个端口关闭状态,但工作正常。
我的主程序只有以下
我可以打开串口并完美接收数据。当我尝试对处于 WaitForCurveChoiceConfirmation 状态的函数使用回调时,问题就出现了。arduino 每隔几秒钟发送一条消息,当程序收到完整消息时,我使用回调。一旦收到消息并调用回调,我的程序就会崩溃。
WaitForCurveChoiceConfirmationState 如下
myInterface类的相关部分如下
崩溃发生在“fullMsgReceivedCallback(*msg);”行 在处理接收数据中。我确定我只是错误地绑定了函数或错误地声明了函数指针对象。
谁能看到我哪里出错了?
感谢您的帮助
boost - 如何使用 boost in_state_reaction
我正在尝试使用in_state_reaction
. 奇怪的是,调用后似乎没有执行此反应功能process_event ()
。我改成in_state_reaction
了custom_reaction
,看起来还不错。
只是想知道如何使它与in_state_reaction
. 我一定做错了什么。
我会应用示例代码。州内没有很多样品。
谢谢。
c++ - boost::statechart ---发布“串行超时”事件
我一直在使用 boost 的异步状态图来编写程序。在这个程序中,我使用异步串行端口与另一个设备通信。我的状态是等待设备通过串行端口进行确认,然后发布“收到确认”事件。这很好用,但是我也想实现一个“超时”事件。
在以前的程序中,我一直在为我的状态机使用 switch case 语句,其中我有可以在每次运行循环时运行的代码。这意味着我可以运行代码并检查是否应该由于超时而更改状态。像这样:
我将如何使用 boost::StateChart 实现这样的事情?我应该以完全不同的方式思考这个问题吗?
state - 具有升压状态图的周期性状态机
我想实现一个状态机,它会定期监控一些状态数据(我系统的状态)并对其做出反应。
对于状态机来说,这似乎是非常基本的事情(我以前曾多次遇到过这个问题),但我找不到一个好的方法来做到这一点。这是一些伪代码来解释我想要实现的目标:
当然最重要的是,我希望能够在进入和退出状态时执行一些操作,也许在状态的每次迭代中执行一些操作,有子状态、历史等。这就是为什么这种简单的方法很快变得不切实际的原因,因此提升状态图。
我已经考虑了一些解决方案,我想得到一些反馈。
1)我可以列出我所有的转换条件并为每个条件创建一个事件。然后我会有一个循环来监控每个布尔切换的时间。例如,对于我的第一个条件,它可能是:
但似乎很快就会变得困难
2) 有一个所有状态都响应的事件。只要有一些新的状态数据可用,就会发布此事件。结果,当前状态将检查数据并决定是否启动到另一个状态的转换
3) 让所有状态都继承自定义 do_work(const MyData & data) 方法的接口,该方法将在循环中从外部调用,检查数据并决定是否启动到另一个状态的转换
另外,我愿意使用另一个框架(即 Macho 或 boost MSM)
c++ - 如何在 Boost::Statechart 中添加转换延迟
如何在 Boost Statechart 中实现非阻塞转换延迟?
c++ - 无法编译我的状态机代码
我正在尝试制作一个状态机DcuClientMachine
,它有两种状态 - StandBy
(默认状态)和Operating
. StandBy
只是一个简单的状态,而Operating
是一个嵌套的Parsing
状态,默认状态。EvConnecting
事件假设StandBy
-> Operating
( Parsing
)
(*1) 和 (*2) 产生
boost\statechart\simple_state.hpp(887): error C2039: 'inner_initial_list' : is not a member of 'DcuClientMachine'
如果我使用(* 3),那么没关系,代码已编译。
这段代码有什么问题?
谢谢你。
c++ - How to prevent boost::statetechart from terminating due to exception thrown
I have implemented a state machine that inherits boost::statechart. When I call fsm.process_event( some_event() )
which reaction is expected to throw exception it turns out that after I handle the exception with try-catch block my statemachine instance fsm
is terminated. That is, fsm.terminated()
returns true
. In some cases I don't want it to get terminated. Like when I want the statemachine to throw exception to inform the caller of fsm.process_event( irrelevant_event() )
for non-handled event and to keep its current prior to the event state.
In short - how can I prevent boost::statechart
from terminating after it throws an exception and keep its prior to the exception state?
Example Code:
Code Output:
I want it to Output: