问题标签 [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.

0 投票
0 回答
79 浏览

c++ - boost::statechart 和非常量事件

有没有办法定义boost::statechart::in_state_reactions允许将非常量事件传递给反应函数?

0 投票
1 回答
951 浏览

c++ - 我可以使用 boost.statecharts 自定义对不同正交区域中多个状态的事件做出反应吗?

我的用例类似于这个 SSCCE。问题是,如果没有发生转换,我需要转发似乎不自然的事件,以便它们由其他正交区域处理。更重要的是,尽管在我需要过渡的情况下,我无法找到一种方法来让该事件在其他地区得到反应。我应该如何重组来解决这个问题?

如果这很重要,我正在使用 boost 1.53。

0 投票
1 回答
315 浏览

c++ - 使用 boost::bind 调用 boost::Statechart 中的函数

我正在尝试编写一个程序来将文件上传到 arduino。该程序可以打开一个串行端口并从 arduino 接收数据。当我尝试对处于状态图状态的函数使用回调时,问题就出现了,程序崩溃了。

我以前从未使用过 boost,并决定这是一个尝试的好机会。

我有一个带有基本转换的状态图对象:空闲;-> 开港;-> 端口开放;-> 等待曲线选择确认;-> 选择文件;-> 等待文件接收;-> 比较文件;-> 关闭程序;

还有一个端口关闭状态,但工作正常。

我的主程序只有以下

我可以打开串口并完美接收数据。当我尝试对处于 WaitForCurveChoiceConfirmation 状态的函数使用回调时,问题就出现了。arduino 每隔几秒钟发送一条消息,当程序收到完整消息时,我使用回调。一旦收到消息并调用回调,我的程序就会崩溃。

WaitForCurveChoiceConfirmationState 如下

myInterface类的相关部分如下

崩溃发生在“fullMsgReceivedCallback(*msg);”行 在处理接收数据中。我确定我只是错误地绑定了函数或错误地声明了函数指针对象。

谁能看到我哪里出错了?

感谢您的帮助

0 投票
1 回答
609 浏览

boost - 如何使用 boost in_state_reaction

我正在尝试使用in_state_reaction. 奇怪的是,调用后似乎没有执行此反应功能process_event ()。我改成in_state_reactioncustom_reaction,看起来还不错。

只是想知道如何使它与in_state_reaction. 我一定做错了什么。

我会应用示例代码。州内没有很多样品。

谢谢。

0 投票
1 回答
328 浏览

c++ - boost::statechart ---发布“串行超时”事件

我一直在使用 boost 的异步状态图来编写程序。在这个程序中,我使用异步串行端口与另一个设备通信。我的状态是等待设备通过串行端口进行确认,然后发布“收到确认”事件。这很好用,但是我也想实现一个“超时”事件。

在以前的程序中,我一直在为我的状态机使用 switch case 语句,其中我有可以在每次运行循环时运行的代码。这意味着我可以运行代码并检查是否应该由于超时而更改状态。像这样:

我将如何使用 boost::StateChart 实现这样的事情?我应该以完全不同的方式思考这个问题吗?

0 投票
1 回答
589 浏览

state - 具有升压状态图的周期性状态机

我想实现一个状态机,它会定期监控一些状态数据(我系统的状态)并对其做出反应。

对于状态机来说,这似乎是非常基本的事情(我以前曾多次遇到过这个问题),但我找不到一个好的方法来做到这一点。这是一些伪代码来解释我想要实现的目标:

当然最重要的是,我希望能够在进入和退出状态时执行一些操作,也许在状态的每次迭代中执行一些操作,有子状态、历史等。这就是为什么这种简单的方法很快变得不切实际的原因,因此提升状态图。

我已经考虑了一些解决方案,我想得到一些反馈。

1)我可以列出我所有的转换条件并为每个条件创建一个事件。然后我会有一个循环来监控每个布尔切换的时间。例如,对于我的第一个条件,它可能是:

但似乎很快就会变得困难

2) 有一个所有状态都响应的事件。只要有一些新的状态数据可用,就会发布此事件。结果,当前状态将检查数据并决定是否启动到另一个状态的转换

3) 让所有状态都继承自定义 do_work(const MyData & data) 方法的接口,该方法将在循环中从外部调用,检查数据并决定是否启动到另一个状态的转换

另外,我愿意使用另一个框架(即 Macho 或 boost MSM)

0 投票
1 回答
399 浏览

c++ - 如何在 Boost::Statechart 中添加转换延迟

如何在 Boost Statechart 中实现非阻塞转换延迟?

0 投票
1 回答
427 浏览

c++ - boost::statechart:如何定义某个状态的两个子状态,而不指定哪个是默认状态?

0 投票
1 回答
168 浏览

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),那么没关系,代码已编译。

这段代码有什么问题?

谢谢你。

0 投票
1 回答
622 浏览

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: