mirror of
https://github.com/mpv-player/mpv
synced 2024-12-12 18:06:18 +00:00
cb7768f9bb
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4864 b3059339-0415-0410-9bf9-f77b7e298cf2
41 lines
1000 B
C
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);
|
|
}
|