Это возможно с потоками. Начиная с C ++ 20, это будет довольно просто:
{
std::jthread t([](std::stop_token stoken) {
while(!stoken.stop_requested()) {
// do things that are not infinite, or are interruptible
}
});
using namespace std::chrono_literals;
std::this_thread::sleep_for(5s);
}
Обратите внимание, что многие взаимодействия с операционной системой приводят к "блокировке" процесса. Примером этого является функция POSIX listen
, которая ожидает входящих соединений. Если поток заблокирован, то он не сможет перейти к следующей итерации.
К сожалению, стандарт C ++ не определяет, должны ли такие вызовы платформы, указанные c, прерываться запросом на остановку или не. Вам нужно использовать методы, определяемые платформой c, чтобы убедиться, что это произойдет. Как правило, сигналы могут быть настроены на прерывание системных вызовов. В случае listen
можно подключиться к ожидающему сокету.