improve ordq
This commit is contained in:
parent
48ab2e60a2
commit
f44ad07116
5 changed files with 50 additions and 43 deletions
|
|
@ -25,7 +25,8 @@ static void* delay_worker(void* args)
|
|||
}
|
||||
|
||||
now = time(NULL);
|
||||
if ((time_t)it->key > now) {
|
||||
t = (delay_task_t*)it->data;
|
||||
if (t->nextrun > now) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -43,7 +44,8 @@ static void* delay_worker(void* args)
|
|||
time_t nextrun = now + t->run_period;
|
||||
|
||||
/* put back to taskq as it need to be run again */
|
||||
ordq_put(&(mgr->tasks), (void*)nextrun, t);
|
||||
t->nextrun = nextrun;
|
||||
ordq_put(&(mgr->tasks), t);
|
||||
}
|
||||
|
||||
FREEUP(it);
|
||||
|
|
@ -52,8 +54,13 @@ static void* delay_worker(void* args)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static int time_cmp(time_t k1, time_t k2)
|
||||
static int task_cmp(void* arg1, void* arg2)
|
||||
{
|
||||
delay_task_t* t1 = (delay_task_t*)arg1;
|
||||
delay_task_t* t2 = (delay_task_t*)arg2;
|
||||
time_t k1 = t1->nextrun;
|
||||
time_t k2 = t2->nextrun;
|
||||
|
||||
if (k1 > k2) {
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -99,7 +106,7 @@ int delaymgr_init(delaymgr_t* mgr, int precision, task_run_fn_t runner_fn)
|
|||
mgr->worker = 0;
|
||||
|
||||
ordq_init(&(mgr->tasks), (ordq_data_killer_t)delay_task_killer,
|
||||
(ordq_cmp_fn_t)time_cmp);
|
||||
(ordq_cmp_fn_t)task_cmp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -183,10 +190,11 @@ int delay_task(delaymgr_t* mgr, int delay, int runcount,
|
|||
|
||||
ts_nextrun = now + delay;
|
||||
|
||||
t->nextrun = ts_nextrun;
|
||||
t->runcount = runcount;
|
||||
t->run_period = delay;
|
||||
t->entry = entry;
|
||||
t->args = args;
|
||||
|
||||
return ordq_put(&(mgr->tasks), (void*)ts_nextrun, t);
|
||||
return ordq_put(&(mgr->tasks), t);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue