【发布时间】:2020-10-16 10:17:29
【问题描述】:
我来自 Boost MSM,现在我正在尝试使用 SML 1.1.3 实现相同的状态机。
使用 SML,我无法访问状态机本身,我不得不使用注入的依赖项。我也大量使用 D-Bus,现在我在进行异步 D-Bus 调用时遇到了问题。异步 D-Bus 调用是在注入依赖项的方法中进行的。当 D-Bus 调用完成时,将调用依赖项内的回调。我需要一种向状态机发出事件的方法。
存储 sml::back::process 不起作用,我无法确定在异步 D-Bus 调用完成时它是否仍然有效。
例子:
auto queryDBusAction = []( Dep& dep, sml::back::process<Ev_Result> processEvent ) {
dep.makeAsyncDBusCall( SomeCallback );
};
...
class Dep
{
public:
void makeAsyncDBusCall( SomeCallback cb )
{
_cb = cb;
_client.someAsyncDBusCall( boost::bind( &Dep::dbusCallFinished, this, _1 ) );
}
protected:
DBusClient _client;
SomeCallback _cb;
void dbusCallFinished( Result& result, const DBus::Error& dbusError )
{
// Here I need a way/callback to emit an event
// that gets processed by the state machine
_cb( Ev_Result{result} );
}
};
【问题讨论】:
标签: c++ boost c++14 state-machine