Как вы реализуете состояния FSM (EDIT: конечный автомат)?
Я обычно думаю о FSM как о наборе функций,
диспетчер,
и поток, чтобы указать текущее рабочее состояние.
То есть я блокирую вызовы функций / функторов, представляющих
государства.
Только сейчас я реализовал один в другом стиле,
где я все еще представляю состояния с функцией (объектом) с, но поток
просто вызывает state->step()
метод, который пытается вернуть
как можно быстрее. Если государство закончило и
Переход должен состояться, это говорит о том, что соответственно.
Я бы назвал это стилем «опроса», так как функции в основном выглядят
как:
void step()
{
if(!HaveReachedGoal)
{
doWhateverNecessary();
return; // get out as fast as possible
}
// ... test perhaps some more subgoals
indicateTransition();
}
Мне известно, что это FSM в составе FSM.
Это выглядит довольно упрощенно, но у него есть определенные преимущества.
Пока поток блокируется или удерживается в каком-то виде
while (!CanGoForward)checkGoForward();
петля может быть громоздкой и громоздкой,
опрос был намного легче отлаживать.
Это потому, что объект FSM
восстанавливает контроль после
каждый шаг и выпуск некоторой отладочной информации - это бриз.
Ну, я отклоняюсь от своего вопроса:
Как вы реализуете состояния автоматов?