#include #include #include #include #include #include "defs.h" #include "alarm.h" #include INC_UNISTD /* alarm signal functions */ sig_atomic_t alarm_count; void alarm_set(); void alarm_handler(int signum); void alarm_init() { alarm_count = 0; alarm_set(); } void alarm_set() { (void) SIGNAL(SIGALRM, alarm_handler); } void alarm_ignore() { (void) SIGNAL(SIGALRM, SIG_IGN); } void alarm_prevent_inheritance() { (void) SIGNAL(SIGALRM, SIG_DFL); } void alarm_handler(int signum) { alarm_count++; HANDLE_SIG(SIGALRM, alarm_handler); } void alarm_wait_for() { while (1) { PAUSE(SIGALRM); if (alarm_count) { alarm_count--; return; } } } int alarm_send(pid_t pid) { return kill(pid, SIGALRM); } void alarm_setitimer(int distortion, int fps) { struct itimerval udt; int tv_usec = 1000000 / distortion * 10 / fps; int stat; udt.it_interval.tv_sec = 0; udt.it_interval.tv_usec = tv_usec; udt.it_value.tv_sec = 0; udt.it_value.tv_usec = tv_usec; fprintf(stderr, "alarm_setitimer: interval timer %d microseconds\n", tv_usec); stat = setitimer(ITIMER_REAL, &udt, (struct itimerval *) NULL); if (stat == 0) return; perror("alarm_setitimer"); exit(1); }