Linux Timer

Da Andreabont's Wiki.

In Linux è possibile richiedere un timer che invia al processo un segnale specifico (SIGALRM) dopo un tempo prestabilito o ogni intervallo di tempo indicato.

Tipologie

  • ITIMER_REAL: Conta il tempo del sistema.
  • ITIMER_VIRTUAL: Conta il tempo di esecuzione del processo.

Esempio

#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <sys/time.h>

struct itimerval t1;

void catch_sig(int sig) {
    printf("Signal %d\n", sig);
}
 
int main(void) {
    
    // Registra l'handler per il segnale SIGALRM
    signal (SIGALRM, catch_sig);

    // Seleziona dopo quanto lanciare il segnale
    t1.it_value.tv_sec = 1;
    t1.it_value.tv_usec = 0;
    
    // Seleziona ogni quanto ripetere il segnale
    t1.it_interval.tv_sec = 0;
    t1.it_interval.tv_usec = 500000;

    // Imposta il timer
    if (setitimer(ITIMER_REAL, &t1, NULL) < 0) {
        printf("timer init failed\n");
    } else {
        printf("timer init succeeded\n");
    }
    
    // ATTENDI
    while(1) sleep(2);

    return 0;

}