У меня нет конкретного ответа, но я хотел бы предложить принцип, которому нужно следовать. Каждая итерация вашего цикла должна включать в себя операцию блокировки, а операция блокировки должна иметь тайм-аут, чтобы он не блокировался вечно. Если у вас нет какой-либо операции блокировки, вы можете использовать режим сна (или, что лучше, дождитесь события с таймаутом, см. Ниже).
Если вы хотите повысить ответственность за разрыв основного цикла, используйте событие вместо флага bool
для управления основным циклом. Таким образом, когда событие сигнализируется, цикл немедленно прерывается. В псевдокоде:
while(!wait_for(cancelLoopEvent, immediate))
{
// do stuff
if(time_to_work())
{
// do the work
}
else
{
wait_for(cancelLoopEvent, loop_timeout)
}
}