Вы должны сообщить потоку, что хотите, чтобы он прекратил работу, и затем подождать, пока он это сделает. Например, вы можете установить логический флаг, который поток регулярно проверяет. Если этот флаг указывает, что работа была отменена, то поток должен вернуться из функции потока.
Не пытайтесь принудительно завершить поток извне, поскольку это приведет к тому, что объекты синхронизации останутся в неопределенном состоянии, приведут к блокировке и т. Д.