1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <pthread.h>
#include <sys/ipc.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>
#include <sys/msg.h>
#include <sys/sem.h>
#include <sys/shm.h>
#include <sys/time.h>
#include <sys/types.h>
timer_t timerid;
void time_handler (void)
{
printf ("debug in handler\n");
timer_gettime (timerid, (struct itimerspec *)NULL);
}
void compute (void)
{
int i = 0;
int j = 0;
while (1)
{
i = j++;
}
}
int main (void)
{
struct itimerspec max_time;
struct sigaction signal_action;
struct sigevent signal_event;
int retour = 0;
max_time.it_interval.tv_sec = 0;
max_time.it_interval.tv_nsec = 0;
max_time.it_value.tv_sec = 2;
max_time.it_value.tv_nsec = 0;
signal_action.sa_handler = (void*)time_handler;
sigemptyset (&signal_action.sa_mask);
signal_action.sa_flags = 0;
errno = 0;
retour = sigaction (SIGUSR1, &signal_action, (struct sigaction *)NULL);
if (retour == -1)
{
fprintf (stderr, "Error %d on sigaction : %s\n", errno, strerror(errno));
exit (-1);
}
signal_event.sigev_notify = SIGEV_SIGNAL;
signal_event.sigev_signo = SIGUSR1;
if (timer_create (CLOCK_REALTIME, &signal_event, &timerid) == -1)
{
fprintf (stderr, "Error %d on timer creation : %s\n", errno, strerror(errno));
exit (-1);
}
printf ("before settime\n");
timer_settime (timerid, 0, &max_time, (struct itimerspec*)NULL);
compute();
printf ("after compute\n");
return EXIT_SUCCESS;
} |
Partager