Boost Statechart Library - как реализовать трудоемкие переходы - PullRequest
3 голосов
/ 24 августа 2009

В нашем проекте у нас есть пользовательский интерфейс и логика (которая может быть представлена ​​как конечный автомат).Переходы между некоторыми шагами в этом шаговом компьютере являются длинными (с IO-привязкой).Мы не хотим украсть наш поток пользовательского интерфейса на все время перехода.Поэтому мы ищем способ выполнить эти переходы в отдельном потоке, а затем обновить пользовательский интерфейс после завершения перехода.

В настоящее время я оцениваю библиотеку диаграмм состояний повышений как один из вариантов реализации такой логики, и яХотелось бы спросить, как правильно реализовать такую ​​функцию с длительными переходами, используя ее?

Спасибо.

1 Ответ

2 голосов
/ 01 сентября 2009

Переходы между состояниями должны запускаться событием, а не длительной операцией.

Если у вас есть логика, в которой есть какие-либо длинные операции, было бы лучше поместить пользовательский интерфейс в собственный поток, иначе вы не будете отвечать.

Вы всегда можете иметь два независимых конечных автомата в своих собственных потоках, а затем использовать межпотоковую связь для каждого, чтобы запускать друг друга. Передача сообщений, вероятно, самый надежный подход. ( boost :: interprocess :: message_queue может быть излишним, но это будет работать)

...