Russian Qt Forum
Ноябрь 23, 2024, 07:47
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
С/C++
>
[РЕШЕНО] HSM - интересное решение !? Но как обычно Trable !)
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: [РЕШЕНО] HSM - интересное решение !? Но как обычно Trable !) (Прочитано 5121 раз)
Денис
Гость
[РЕШЕНО] HSM - интересное решение !? Но как обычно Trable !)
«
:
Ноябрь 10, 2014, 13:58 »
Предисловие
HSM
-
Hierarhical State Machine
... с буржуйского иерархический конечный автомат )
В общем есть паттерн от
Миро Самека
, так вот не понятно назначение некоторых функция диспечера сообытий ... можете помочь, кто с ним работал ? Тема довольно интересна и частичто с ней разобрался, но есть подводные камни !!!
Вот ссылка:
http://www.state-machine.com/resources/samek0008.pdf
К примеру ничерта не понятено зачем нужна функция
HsmToLCA_()
и
HsmExit_()
?
И еще не понятна таблица трассировки или как там она
entryPath
?
Методы обмена сообщениями не понятно назначение сообытия
start_evt
если есть
entry_evt
для инициализации состояния ?
Помогите плз, 2 дня уже бьюсь !
Как я понял
HsmToLCA_
нужна для списка предков, но не понятен механизм как она ищет предков, запутался ... И зачем событие
START_EVT
если есть
ENTRY_EVT
, по мне это дублирование или я чего-то не понимаю ?
«
Последнее редактирование: Ноябрь 11, 2014, 15:57 от Денис
»
Записан
Денис
Гость
Re: HSM - интересное решение !? Но как обычно Trable !)
«
Ответ #1 :
Ноябрь 10, 2014, 14:23 »
Как я понял
START_EVT
нужно для входа в подсостояние, тобишь
State *next
...
Если мы хотим сменить состояние, то воспользоваться
STATE_TRAN()
...
А если я хочу выйти ?, нужно что воспользоваться
HsmExit_()
, но в модели она защищенная, программирую сейчас для
C
... пидскажить ?)
Записан
vulko
Гость
Re: HSM - интересное решение !? Но как обычно Trable !)
«
Ответ #2 :
Ноябрь 10, 2014, 14:41 »
Цитата: Денис от Ноябрь 10, 2014, 14:23
Как я понял
START_EVT
нужно для входа в подсостояние, тобишь
State *next
...
Если мы хотим сменить состояние, то воспользоваться
STATE_TRAN()
...
А если я хочу выйти ?, нужно что воспользоваться
HsmExit_()
, но в модели она защищенная, программирую сейчас для
C
... пидскажить ?)
судя по "FIGURE 1 Structure of HSM design pattern" подразумевается что будет создана собственная имплементация (ConcreteHSM) и вызов protected функционала не будет проблемой.
Записан
Денис
Гость
Re: HSM - интересное решение !? Но как обычно Trable !)
«
Ответ #3 :
Ноябрь 10, 2014, 14:54 »
Цитата: vulko от Ноябрь 10, 2014, 14:41
Цитата: Денис от Ноябрь 10, 2014, 14:23
Как я понял
START_EVT
нужно для входа в подсостояние, тобишь
State *next
...
Если мы хотим сменить состояние, то воспользоваться
STATE_TRAN()
...
А если я хочу выйти ?, нужно что воспользоваться
HsmExit_()
, но в модели она защищенная, программирую сейчас для
C
... пидскажить ?)
судя по "FIGURE 1 Structure of HSM design pattern" подразумевается что будет создана собственная имплементация (ConcreteHSM) и вызов protected функционала не будет проблемой.
Хорошо, а как тогда правильно выйти из состояния ?
HsmExit_(HsmtoLCA())
... или я так понимаю их по примеру и использовать нет необходимости, нужно просто в определенный момент воспользоваться
STATE_TRAN(me,target)
и все ... или как ?
Записан
vulko
Гость
Re: HSM - интересное решение !? Но как обычно Trable !)
«
Ответ #4 :
Ноябрь 10, 2014, 15:52 »
Цитата: Денис от Ноябрь 10, 2014, 14:54
Цитата: vulko от Ноябрь 10, 2014, 14:41
Цитата: Денис от Ноябрь 10, 2014, 14:23
Как я понял
START_EVT
нужно для входа в подсостояние, тобишь
State *next
...
Если мы хотим сменить состояние, то воспользоваться
STATE_TRAN()
...
А если я хочу выйти ?, нужно что воспользоваться
HsmExit_()
, но в модели она защищенная, программирую сейчас для
C
... пидскажить ?)
судя по "FIGURE 1 Structure of HSM design pattern" подразумевается что будет создана собственная имплементация (ConcreteHSM) и вызов protected функционала не будет проблемой.
Хорошо, а как тогда правильно выйти из состояния ?
HsmExit_(HsmtoLCA())
... или я так понимаю их по примеру и использовать нет необходимости, нужно просто в определенный момент воспользоваться
STATE_TRAN(me,target)
и все ... или как ?
HsmExit_ судя по докам выходит из всех состояний HSM вплоть до LCA.
STATE_TRAN не совсем то же самое.
Записан
Денис
Гость
Re: HSM - интересное решение !? Но как обычно Trable !)
«
Ответ #5 :
Ноябрь 10, 2014, 16:00 »
Цитата: vulko от Ноябрь 10, 2014, 15:52
Цитата: Денис от Ноябрь 10, 2014, 14:54
Цитата: vulko от Ноябрь 10, 2014, 14:41
Цитата: Денис от Ноябрь 10, 2014, 14:23
Как я понял
START_EVT
нужно для входа в подсостояние, тобишь
State *next
...
Если мы хотим сменить состояние, то воспользоваться
STATE_TRAN()
...
А если я хочу выйти ?, нужно что воспользоваться
HsmExit_()
, но в модели она защищенная, программирую сейчас для
C
... пидскажить ?)
судя по "FIGURE 1 Structure of HSM design pattern" подразумевается что будет создана собственная имплементация (ConcreteHSM) и вызов protected функционала не будет проблемой.
Хорошо, а как тогда правильно выйти из состояния ?
HsmExit_(HsmtoLCA())
... или я так понимаю их по примеру и использовать нет необходимости, нужно просто в определенный момент воспользоваться
STATE_TRAN(me,target)
и все ... или как ?
HsmExit_ судя по докам выходит из всех состояний HSM вплоть до LCA.
STATE_TRAN не совсем то же самое.
Ну как я понял
STATE_START
для входа в подсостояние,
STATE_TRAN
- для перехода в другое состояние (уровнем выше или в другую иерархию состояний),
HsmExit_()
- выход из всех подсостояний и переход на top - состояние главное состояние, это типа в случае какой-то ошибки страшной )))
То есть по сути она в большей части работы программы не нужна ... Вроде так, поправь если считаешь по другому ?
«
Последнее редактирование: Ноябрь 10, 2014, 23:59 от Денис
»
Записан
vulko
Гость
Re: HSM - интересное решение !? Но как обычно Trable !)
«
Ответ #6 :
Ноябрь 11, 2014, 09:39 »
Документация очень понятная вроде, хотя я ей всю и не читал, только пробежал взглядом.
Если есть проблемы с пониманием того как оно работает, может лучше написать свою реализацию? Тут всего ничего кода то...
Зато отпадут вопросы о том что и как делать...
STATE_START стартует автомат. Т.е. он из псевдосостояния переходит в начальное состояние.
STATE_TRANS переходит в следущее состояние.
Т.е. первое только один раз в начале, второе при переходе в след. состояние.
Записан
Денис
Гость
Re: HSM - интересное решение !? Но как обычно Trable !)
«
Ответ #7 :
Ноябрь 11, 2014, 12:53 »
Проблема в понимании как раз использования START и TRAN, и генерируются какие события при этом ENTRY, START и т.д. Менеждер состояний реализован же по какому-то стандарту ? Где про него можно почитать не в курсе ?
Записан
vulko
Гость
Re: HSM - интересное решение !? Но как обычно Trable !)
«
Ответ #8 :
Ноябрь 11, 2014, 13:50 »
Цитата: Денис от Ноябрь 11, 2014, 12:53
Проблема в понимании как раз использования START и TRAN, и генерируются какие события при этом ENTRY, START и т.д. Менеждер состояний реализован же по какому-то стандарту ? Где про него можно почитать не в курсе ?
Там же есть код.
Впрочем код конечно ппц... написано идиотом, который считает себя гением видимо.
Я бы за одни названия методов и переменных уши бы обрывал таким шкодерам.
Что это, мать его, за exit_(), нахрена state_start в виде метода, а state_trans макросом... жесть какая-то.
Ещё раз глянул супер код...
Сперва делаешь STATE_START(State *target), он задает next = target. А потом STATE_TRANS(currentState), видимо...
Короче мой добрый совет тебе - выкини эту х**ту и напиши нормальный код, не парь себе мозг.
Записан
Денис
Гость
Re: HSM - интересное решение !? Но как обычно Trable !)
«
Ответ #9 :
Ноябрь 11, 2014, 15:54 »
Цитата: vulko от Ноябрь 11, 2014, 13:50
Цитата: Денис от Ноябрь 11, 2014, 12:53
Проблема в понимании как раз использования START и TRAN, и генерируются какие события при этом ENTRY, START и т.д. Менеждер состояний реализован же по какому-то стандарту ? Где про него можно почитать не в курсе ?
Там же есть код.
Впрочем код конечно ппц... написано идиотом, который считает себя гением видимо.
Я бы за одни названия методов и переменных уши бы обрывал таким шкодерам.
Что это, мать его, за exit_(), нахрена state_start в виде метода, а state_trans макросом... жесть какая-то.
Ещё раз глянул супер код...
Сперва делаешь STATE_START(State *target), он задает next = target. А потом STATE_TRANS(currentState), видимо...
Короче мой добрый совет тебе - выкини эту х**ту и напиши нормальный код, не парь себе мозг.
Действительно названия меня в ступор и вводили, где входы где выходы.
Вообщем разобрался ... Смотри если интересно, при входе в главное супер состояние
TOP
вызываем
STATE_START
для создания иерархического состояния (допустим
WHATISFUCK
), внутреннего ... Далее если в
TOP
есть еще подсостояния
NEWISFUCK
, кроме
WHATISFUCK
, для перехода к нему используем
STATE_TRANS
, а если хотим войти в подсостояние
WHATISFUCK
, то опять метод
STATE_START
... То есть метод
STATE_START
для входа в подсостояния, иерархически ... Если нужно выйти или войти в подсостояние
NEWISFUCK
, то опять
STATE_TRANS
...
Вообщем
STATE_START
для входа во внутреннее состояние, а
STATE_TRANS
- для всего остального )
Просто надо было разобраться, есть код написанный с помощью этого менеджера состояний ))))))
«
Последнее редактирование: Ноябрь 11, 2014, 15:56 от Денис
»
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...