improve ordq

This commit is contained in:
Rongsong Shen 2025-12-17 15:28:27 +08:00
parent 48ab2e60a2
commit f44ad07116
5 changed files with 50 additions and 43 deletions

View file

@ -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);
}