<signal.h >
#include <sys/time.h >
#include
#define MAX_COUNT 100
/* This flag controls termination of the main loop. */
volatile sig_atomic_t counter = 0;
/* The signal handler just clears the flag and re-enables itself. */
void
catch_alarm (int sig)
{
counter++;
signal (sig, catch_alarm);
// printf("\nCatch an alarm!\n");
}
void do_stuff (void)
{
static unsigned long c = 0;
printf ("Doing stuff while waiting for alarm (myCounter = %u, Counter=%u) \r", ++c, counter);
}
void set_timer_val(struct itimerval *t, const unsigned long ival_usec, const unsigned int val_usec)
{
//period between successive timer interrupts
t->it_interval.tv_usec = ival_usec % 1000000;
t->it_interval.tv_sec = ival_usec / 1000000;
//period between now and the first timer interrupt
t->it_value.tv_usec = val_usec % 1000000;
t->it_value.tv_sec = val_usec / 1000000;
}
int main (void)
{
struct itimerval ival, oval;
/* Establish a handler for SIGALRM signals. */
signal (SIGALRM, catch_alarm);
/* Set an alarm to go off in a little while. */
// one-shot timer
set_timer_val(&ival, 1000000, 500000);
setitimer (ITIMER_REAL, &ival, &oval);
/* Check the flag once in a while to see when to quit. */
while (counter < MAX_COUNT)
do_stuff ();
printf("\n");
return EXIT_SUCCESS;
}