Вот два примера использования функции будильника. Тревога вызывает срабатывание SIGALRM через n секунд после вызова этой функции.
Эта программа будет работать в течение 3 секунд, а затем умрет с SIGALRM.
#include <signal.h>
#include <unistd.h>
int main() {
alarm(3);
while(true);
}
В этом случае мы бы хотели поймать SIGALRM и умирать изящно с сообщением:
#include <signal.h>
#include <unistd.h>
#include <iostream>
volatile bool alarmed = false;
void alrm_handler(int) {
alarmed = true;
}
int main() {
signal(SIGALRM, alrm_handler);
alarm(3);
while(not alarmed);
std::cout << "done" << std::endl;
}