You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求支持UML‘do activity’的C/C++状态机库及解决方案

关于C++状态机库UML 'do activity'机制的需求与疑问

我在GitHub上查找了Boost、tinyFSM等C++状态机(FSM、HSM等)库,发现这些库均未实现UML的do activity机制,仅支持事件触发状态转换时执行单次动作(如fsm.process_event(Event{}))。这里的activity指可被事件中断的长时动作(类似线程内执行的任务),但我不需要真实的std::thread,而是需要一个tick()(又称on_running())方法,能在并发场景下被状态类调用。

我的思路伪代码如下:

struct State1 { void on_running() { ... // 阻塞但响应迅速的代码 } };
FSM fsm; // + 转换表初始化

void threaded_routine()
{
  fsm.process_event(Event1{});
}

int main()
{
  fsm.process_event(Event2{});
  while (true)
  {
    fsm.tick(); // 会调用fsm.current_state.on_running(),在这个方法里我可以最终调用fsm.process_event(Event3{});
  }
}

我有此需求的原因是需要集成一个提供.tick()更新方法的库。

注:在UML中,状态自转换时不会调用on_entering和on_leaving动作(Boost中通过构造/析构函数实现),因此我不确定在Boost中添加同状态间带动作的转换能否模拟on_running()方法。

关于Boost Statechart的相关说明:

Do activity

- Not supported in Boost.Statechart
- A do activity can be simulated with a separate thread that is started in the entry action and cancelled (!) in the exit action of a particular state

目前我尝试过itemis Create,它支持activity,但属于专有工具。

问题

  1. 是否存在支持activity的C/C++状态机库?
  2. 为何多数状态机库仅支持事件触发转移动作?
  3. 是否有同类需求的开发者已解决该问题?
  4. 能否提供基础实现示例?

内容的提问来源于stack exchange,提问作者Lecrapouille

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 19:28:25