У меня есть несколько классов C ++ с тысячами строк кода в каждом. Существует конечный автомат высокого уровня, который является источником всех других вызовов функций (root стека вызовов).
Я хочу иметь возможность отменить выполнение в любое время. Например, он находится в середине одного состояния, я не буду сразу останавливать код и переходить в другое состояние.
Это мой план, и я хочу знать, имеет ли он смысл или вы, ребята, увидеть большой недостаток в этом подходе:
1- В каждом состоянии создать поток поддержки и запустить код внутри этого потока 2- Если запрашивается "отмена", вызовите функцию thread.interrupt () 3 - Перегрузка " -> "оператор классов и поставить" boost :: this_thread :: interrupt_point (); " до и после всех вызовов функции
При таком подходе я ожидаю прерывания каждого состояния перед следующим вызовом функции-члена или после текущего вызова функции-члена
Работает ли это? У вас есть лучший подход? Любая помощь очень ценится
** Было бы намного лучше, если бы у меня были очень быстрые состояния (короткое время выполнения). Тогда я мог бы изменить состояние прямо в машине состояний без необходимости прерывать состояние. Однако код, с которым я работаю, к сожалению, далек от этого дизайна.
Refs: https://www.tutorialspoint.com/cplusplus/class_member_access_operator_overloading.htm
https://www.justsoftwaresolutions.co.uk/threading/thread-interruption-in-boost-thread-library.html