Boost Statechart Library - как реализовать трудоемкие переходы
В нашем проекте у нас есть пользовательский интерфейс и логика (которая может быть представлена как конечный автомат). Переходы между некоторыми шагами в этом шаговом компьютере являются длинными (с IO-привязкой). Мы не хотим украсть наш поток пользовательского интерфейса на все время перехода. Поэтому мы ищем способ выполнить эти переходы в отдельном потоке, а затем обновить интерфейс после его завершения.
В настоящее время я оцениваю библиотеку диаграммы состояний наддува как один из вариантов реализации такой логики, и я хотел бы спросить, как правильно реализовать такую функцию с длительными переходами, используя ее?
Благодарю.
1 ответ
Переходы между состояниями должны инициироваться событием, а не длительной операцией.
Если у вас есть логика, которая имеет какие-либо длинные операции, было бы лучше поместить пользовательский интерфейс в свой собственный поток, иначе вы не будете отвечать.
Вы всегда можете иметь два независимых конечных автомата в своих собственных потоках, а затем использовать межпотоковую связь для каждого, чтобы запускать друг друга. Передача сообщений, вероятно, самый надежный подход. ( boost:: interprocess:: message_queue может быть излишним, но это будет работать)