1
mirror of https://github.com/mpv-player/mpv synced 2024-11-03 03:19:24 +01:00
mpv/linux/timer.c
nick cb7768f9bb POSIX compatible timer's callback
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4864 b3059339-0415-0410-9bf9-f77b7e298cf2
2002-02-25 14:24:11 +00:00

41 lines
1000 B
C

/* POSIX compatible timer callback */
#include <sys/time.h>
#include <signal.h>
#include <stddef.h>
#include "timer.h"
static timer_callback *user_func = NULL;
static struct itimerval otimer;
static void (*old_alrm)(int) = SIG_DFL;
static void my_alarm_handler( int signo )
{
if(user_func) (*user_func)();
}
unsigned set_timer_callback(unsigned ms,timer_callback func)
{
unsigned ret;
struct itimerval itimer;
user_func = func;
getitimer(ITIMER_REAL,&otimer);
old_alrm = signal(SIGALRM,my_alarm_handler);
signal(SIGALRM,my_alarm_handler);
itimer.it_interval.tv_sec = 0;
itimer.it_interval.tv_usec = ms*1000;
itimer.it_value.tv_sec = 0;
itimer.it_value.tv_usec = ms*1000;
setitimer(ITIMER_REAL,&itimer,NULL);
getitimer(ITIMER_REAL,&itimer);
ret = itimer.it_interval.tv_sec*1000 + itimer.it_interval.tv_usec/1000;
if(!ret) restore_timer();
return ret;
}
void restore_timer(void)
{
signal(SIGALRM,old_alrm);
setitimer(ITIMER_REAL,&otimer,NULL);
}