Нет специальной функции для отмены потока Вы можете использовать pthread_cancel
для отмены потока, как уже упоминалось (но я бы советовал против этого, если вы не знаете, что делаете), и вынужно настроить свои таймеры.Но while(!isInterrupted)
- вполне приемлемый способ сделать это.
В основном это должно быть так:
while(!isInterrupted)
{
// whatever you want to do
sleep(howLongYouWantToWait);
}
// clean up and exit the thread function here
и в главном потоке есть глобальный (или другой, см. Ниже)
volatile bool isInterrupted = false;
и установите его на true
, когда вы закончите, и pthread_join
, если вы хотите дождаться окончания потока.
Вместо глобального вы можете использоватьпеременная класса, или указатель флага, переданный функции потока, или любой другой способ, глобальный, является самым простым и наименее предпочтительным.
Конечно, если вы хотите отменить поток, пока он ждет, а нечтобы отменить его только после завершения всего цикла, вам нужно иметь дело с сигналами и другими вещами, но я думаю, что вы этого не ищете.