Re: Static Finite State Machine
От: slay93  
Дата: 06.10.06 14:18
Оценка:
Всем привет!
Пишу некое приложение, своего рода IDE. Логика не из простых. Вот возникла задумка реализовать логику этого приложения на КА.
Но, поскольку не слишком силен в метапрограммировании, возникла проблемка, которую хочется решить как-нть по-изящнее. А именно:
Допустим, есть два КА — один отвечает за логику работы окон приложения (ну, там, открыть/закрыть, очистить/заполнить и т.д.), а другой КА отвечает за логику внутренних данных (например, восстановить из файла или обновить в файле, проверить и пр.). Так вот, как можно изящно передать event из одного КА в другой?
Попробую проиллюстрировать:
//...
class SFSM1 : public fsm::Builder< STT1, STATE1, EVENT1 > {}
class SFSM2 : public fsm::Builder< STT2, STATE2, EVENT2 > {}

int main() {
  SFSM1 sfsm1;
  SFSM2 sfsm2;
  
  sfsm1.postEvent( E_SOMEEVENT ); // <-- например, вот тут
  // хотелось бы состояние sfsm2 на другое, отличное от начального

Возможно ли это сделать из функции контекста?
Re: Static Finite State Machine
От: Аноним  
Дата: 20.06.08 14:37
Оценка:
Здравствуйте, Alexander Nikolayenko, Вы писали:

Вопрос заключается вот в чем — как добавить возможность перейти в произвольное состояние? Поясняю. При переходе из состояния в состояние выполняется действие, в котором есть проверка некоего условия, и в зависимости от этого условия новое состояние может быть тем или иным. Проиллюстрирую вопрос примером из статьи. FSM на рис 7 выдает сдачу: returnNickel, returnDimeAndNickel etc. Предположим, что монеты разного достоинства разложены по разным коробочкам, которым посылаются сигналы типа "выдать монетку", у нас вызывается действие returnDimeAndNickel, и никелей нет. Автомат сдачу дать не может, мы хотим, чтобы он перешел в состояние "Ошибка" с выдачей собшения "Позвоните в сервис центр" и "Нажмите кнопку Старт для продолжения". Как это красиво реализовать с использованием FSM и в частности вашей реализации?
Re[2]: Static Finite State Machine
От: Plague Россия 177230800
Дата: 03.07.08 11:25
Оценка:
Некромант? =)
... << RSDN@Home 1.2.0 alpha rev. 787>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.