Для правильной очистки объекта и восстановления ресурсов вам нужно либо сгенерировать исключение, либо просто остановить вычисление и позволить функциям вычисления вернуться нормально.
Не следует прерывать поток или использовать longjmp
, так как они не будут уничтожать объекты, созданные вашими вычислениями, что приведет к утечкам памяти и любым другим ресурсам (таким как дескрипторы файлов), которые вы можете использовать.
Использование std::atomic
(легко доступного из любого места), которое Ваш опрос периодически является одним из способов достижения этого. Вы должны будете проверять это регулярно, поэтому проверка должна быть в или около любых ваших петель. Короткие, быстрые циклы не нужно проверять во время цикла, но должна быть какая-то проверка по крайней мере несколько раз в секунду. Как только вы обнаружите запрос на отмену, вы можете либо выбросить свое исключение, либо вернуться из текущей функции (поэтому родительская функция также должна будет проверять отмену).
Один недостаток для всего, что если вы пропустите зарегистрируйтесь в oop где-нибудь, ваша отмена может произойти не сразу.