- Rename `precision` field to `precision_ms` in delaymgr_t struct (delay.h) - Replace `sleep(mgr->precision)` with `nanosleep()` for 10ms granularity (delay.c) - Add `#include <time.h>` to delay.c (already in delay.h) - Update delaymgr_init() to store precision_ms parameter - Update all call sites: cluster.c (2→200ms), controller/testsuite/test.c (2→2000ms), lib/testsuite/test_delay.c (1→1000ms) - Add TDD test test_delaymgr_precision_ms_field verifying field exists and stores correctly - delay_task() delay parameter remains in seconds; only sleep granularity changes
38 lines
926 B
C
38 lines
926 B
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;
|
|
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*);
|
|
|
|
#endif
|