Mercurial > mplayer.hg
changeset 4863:df50da00260a
POSIX compatible timer's callback
author | nick |
---|---|
date | Mon, 25 Feb 2002 14:24:11 +0000 |
parents | 8a5f63217419 |
children | 6434171a8f35 |
files | linux/Makefile linux/timer.c linux/timer.h |
diffstat | 3 files changed, 49 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/linux/Makefile Mon Feb 25 14:23:31 2002 +0000 +++ b/linux/Makefile Mon Feb 25 14:24:11 2002 +0000 @@ -3,7 +3,7 @@ LIBNAME = libosdep.a -SRCS=getch2.c timer-lx.c shmem.c +SRCS=getch2.c timer-lx.c timer.c shmem.c OBJS=$(SRCS:.c=.o) ifeq ($(TARGET_ARCH_X86),yes)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/linux/timer.c Mon Feb 25 14:24:11 2002 +0000 @@ -0,0 +1,40 @@ +/* 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); +}
--- a/linux/timer.h Mon Feb 25 14:23:31 2002 +0000 +++ b/linux/timer.h Mon Feb 25 14:24:11 2002 +0000 @@ -1,3 +1,5 @@ +#ifndef __TIMER_H +#define __TIMER_H void InitTimer(); unsigned int GetTimer(); @@ -7,3 +9,9 @@ int usec_sleep(int usec_delay); +/* timer's callback handling */ +typedef void timer_callback( void ); +extern unsigned set_timer_callback(unsigned ms,timer_callback func); +extern void restore_timer(void); + +#endif