Используйте «Перегрузка оператора доступа к классу» для предоставления точек прерывания. - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть несколько классов 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

...