stream-deploy/ZLM/3rdpart/media-server/libsip/test/sip-timer.c

64 lines
1.1 KiB
C++

#include "sip-timer.h"
#include "aio-timeout.h"
#include "sys/system.h"
#include "sys/thread.h"
#include <stdlib.h>
static pthread_t s_threads[2];
static int s_running;
static int STDCALL sip_timer_run(void* param)
{
volatile int* running = (int*)param;
while (*running)
{
aio_timeout_process();
system_sleep(5);
}
return 0;
}
void sip_timer_init(void)
{
int i;
s_running = 1;
for(i = 0; i < sizeof(s_threads)/sizeof(s_threads[0]); i++)
{
thread_create(s_threads+i, sip_timer_run, &s_running);
}
}
void sip_timer_cleanup(void)
{
int i;
s_running = 0;
for (i = 0; i < sizeof(s_threads) / sizeof(s_threads[0]); i++)
{
thread_destroy(s_threads[i]);
}
}
sip_timer_t sip_timer_start(int timeout, sip_timer_handle handler, void* usrptr)
{
struct aio_timeout_t* t;
t = calloc(1, sizeof(struct aio_timeout_t));
if (0 == aio_timeout_start(t, timeout, handler, usrptr))
return t;
free(t);
return NULL;
}
int sip_timer_stop(sip_timer_t* id)
{
int r;
struct aio_timeout_t* t;
if (NULL == id || NULL == *id)
return -1;
t = (struct aio_timeout_t*)*id;
r = aio_timeout_stop(t);
free(t);
*id = NULL;
return r;
}