myxce/src/include/delay.h
Rongsong Shen 4737b0f8a3 feat(election-iomgr-refactor): add delay_task_ms() for ms-granularity one-shot tasks
Add millisecond-granularity delay_task_ms() to delaymgr using
clock_gettime(CLOCK_MONOTONIC) for deadline computation. Extends
delay_task_t with nextrun_ts field; delay_worker distinguishes
ms-tasks from second-tasks via non-zero nextrun_ts. Backward
compatible with existing delay_task callers.

4 delay tests pass (2 new: tolerance and invalid-args).
Provides the timeout primitive for election and committing watchdogs.
2026-05-30 07:15:54 +00:00

40 lines
1.1 KiB
C

#if !defined(_DELAY_H_)
#define _DELAY_H_ 1
#include <pthread.h>
#include <stdint.h>
#include <sys/types.h>
#include <time.h>
#include "ordq.h"
typedef int (*delay_task_entry_fn_t)(void*);
typedef int (*task_run_fn_t)(delay_task_entry_fn_t, void*);
typedef struct {
time_t nextrun;
struct timespec nextrun_ts; /* non-zero tv_nsec flags an ms-task */
int run_period;
int runcount;
delay_task_entry_fn_t entry;
void* args;
} delay_task_t;
typedef struct {
pthread_t worker;
int running;
int precision_ms;
task_run_fn_t runner_fn;
timer_t timerid;
ordq_t tasks;
} delaymgr_t;
extern int delaymgr_init(delaymgr_t*, int, task_run_fn_t);
extern void delaymgr_stop(delaymgr_t*);
extern void delaymgr_fini(delaymgr_t*);
extern int delaymgr_start(delaymgr_t*);
extern int delay_task(delaymgr_t*, int, int, delay_task_entry_fn_t, void*);
extern int delay_task_ms(delaymgr_t*, int, int, delay_task_entry_fn_t, void*);
#endif