34 |
/* Periodic task thread */ |
/* Periodic task thread */ |
35 |
static void *ptask_run(void *arg) |
static void *ptask_run(void *arg) |
36 |
{ |
{ |
37 |
|
pthread_mutex_t umutex = PTHREAD_MUTEX_INITIALIZER; |
38 |
|
pthread_cond_t ucond = PTHREAD_COND_INITIALIZER; |
39 |
|
|
40 |
ptask_t *task; |
ptask_t *task; |
41 |
|
|
42 |
for(;;) { |
for(;;) { |
44 |
for(task=ptask_list;task;task=task->next) |
for(task=ptask_list;task;task=task->next) |
45 |
task->cbk(task->object,task->arg); |
task->cbk(task->object,task->arg); |
46 |
PTASK_UNLOCK(); |
PTASK_UNLOCK(); |
47 |
usleep(ptask_sleep_time*1000); |
|
48 |
|
/* For testing! */ |
49 |
|
{ |
50 |
|
struct timespec t_spc; |
51 |
|
m_tmcnt_t expire; |
52 |
|
|
53 |
|
expire = m_gettime_usec() + 2000; |
54 |
|
|
55 |
|
pthread_mutex_lock(&umutex); |
56 |
|
t_spc.tv_sec = expire / 1000000; |
57 |
|
t_spc.tv_nsec = (expire % 1000000) * 1000; |
58 |
|
pthread_cond_timedwait(&ucond,&umutex,&t_spc); |
59 |
|
pthread_mutex_unlock(&umutex); |
60 |
|
} |
61 |
|
|
62 |
|
/* Old method... */ |
63 |
|
//usleep(ptask_sleep_time*1000); |
64 |
} |
} |
65 |
|
|
66 |
return NULL; |
return NULL; |