прежде всего "правильно", потому что я предполагаю, что люди скажут мне, что запускать потоки из класса - это плохая практика. :)
Поэтому мне интересно, как лучше остановить бесконечный поток в деструкторе. Функция обтекания, которую поток вызывает при попытке и выбрасывает исключение, когда установлен флаг отключения? Просто старый добрый int / enum? Хороший новый std :: atomic int? Что-то другое?
Сейчас я использую:
//in destructor I call terminate member func
void terminate()
{
currentStatus=terminating;
std::cout<<"trying to kill"<<std::endl;
while (currentStatus!=terminated)
std::this_thread::yield();
std::cout<<"MISSION ACOMPLISHED"<<std::endl;
}
И функция, выполняемая потоком:
while (currentStatus==active)
{
//...
}
currentStatus=terminated;
currentStatus - это перечисление:
enum status{
active,
terminating,
terminated
};