Нить - это не какой-то магический объект, который можно заставить делать что-то.Это отдельный путь выполнения через ваш код.Ваш код нельзя заставить произвольно перемещаться по его базе кода, если вы специально не запрограммируете его для этого.И даже в этом случае это может быть сделано только в рамках правил C ++ (т. Е. Вызова функций).
Вы не можете уничтожить поток, поскольку уничтожение потока может полностью разрушить некоторые из самых фундаментальных предположений, которые делает программист.Теперь вам нужно будет принять во внимание возможность того, что следующая строка не будет выполняться по причинам, которые вы не можете ни предсказать, ни предотвратить.
Это не похоже на обработку исключений, когда C ++ специально требует вызова деструкторови у вас есть возможность ловить исключения и выполнять специальную очистку.Вы говорите о выполнении одного фрагмента кода, а затем о внезапном завершении выполнения всего этого стека вызовов.Это не сработает.
Причина, по которой веб-браузеры перешли с модели «поток на вкладку» на модель «процесс на вкладку», заключается именно в том, что процессы могут бытьзавершено, не оставляя другие процессы в неизвестном состоянии.Вам нужно использовать процессы вместо потоков.
Когда процесс завершает работу и устанавливает свои данные, вам нужно использовать какую-то систему межпроцессного взаимодействия для чтения этих данных (мне самому нравится Boost.Interprocess).Это не будет выглядеть как обычная глобальная переменная C ++, но у вас не должно возникнуть проблем с ее чтением.Таким образом, вы можете эффективно завершить процесс, если он занимает слишком много времени, и ваша программа останется в разумном состоянии.